Fork me on GitHub

Splitter

<!DOCTYPE html>
<html>
<head>
<title>PDemo</title>

</head>
<body>
<div id="test">
<div id="container" style="position:absolute; top:0px;height:535px;width:805px;left:0px; background-color:red;">
<div id="leftPanel" style="position:absolute;top:0px;width:400px;height:535px;left:0px;overflow:hidden;background-color:gray;"></div>
<div id="splitterBar" onmousedown="fnMouseDown(event,200,600,400,400);" style="padding:0px;border:0px;height:100%; left:400px;top:0;width:5px;background-color:black;cursor:w-resize;position:absolute;border-style:solid;"
></div>
<div id="rightPanel" style="position:absolute; left:405px;top:0;height:535px;width:400px;min-width:200px;max-width:600px;overflow:hidden; background-color:green;"></div>
</div>
</div>
</body>
<script type="text/javascript">
function fnMouseDown(ev,minLeftWidth,maxLeftWidth,oriLeftWidth, oriRightWidth){
var splitterBar = document.getElementById('splitterBar');
var leftPanel = document.getElementById('leftPanel');
var rightPanel = document.getElementById('rightPanel');
var container = document.getElementById('container');
var minLeftWidths = minLeftWidth;
var maxLeftWidths = maxLeftWidth;
var origianlLeftWidth = oriLeftWidth;
var originalRightWidth = oriRightWidth;

var left = splitterBar.offsetLeft;
var oWidth = leftPanel.offsetWidth;
var rightLeft = rightPanel.offsetLeft;
var containerWidth = parseInt(container.style.width);
var leftPanelWidth = parseInt(leftPanel.style.width);
var rightPanelWidth = parseInt(rightPanel.style.width);
var splitterBarWidth = parseInt(splitterBar.style.width);

var oEvent = ev || event;
var disX = oEvent.clientX - left;
var disForRightPanel = rightLeft - oEvent.clientX;
document.onmousemove = function (ev){
var oEvent = ev || event

var currentleftWidth = oEvent.clientX - disX;

if(currentleftWidth > maxLeftWidths || leftPanelWidth > maxLeftWidths){
leftPanel.style.width = origianlLeftWidth + 200 + "px";
splitterBar.style.left = origianlLeftWidth + 200 + "px";
rightPanel.style.width = rightPanelWidth - 200 + "px";

} else if(currentleftWidth < minLeftWidths || leftPanelWidth < minLeftWidths) {
leftPanel.style.width = origianlLeftWidth - 200 + "px";
splitterBar.style.left = origianlLeftWidth - 200 + "px";
rightPanel.style.width = originalRightWidth + 200 + "px";
} else {
splitterBar.style.left = oEvent.clientX - disX + 'px';
console.log("splitterBar.style.left is : " + splitterBar.style.left);
leftPanel.style.width = oEvent.clientX - disX + 'px';
//console.log("leftPanel.style.width: " + oEvent.clientX - disX +'sfsdfsdfsd');
rightPanel.style.left = oEvent.clientX - disX + splitterBarWidth + 'px';
/*rightPanel.style.width = (containerWidth - parseInt(rightPanel.style.left)) +    'px';*/
rightPanel.style.width = (containerWidth - (oEvent.clientX - disX) - splitterBarWidth) +'px';
console.log("rightPanel width" + (containerWidth - (oEvent.clientX - disX) - splitterBarWidth));
}
document.onmouseup = function (){
document.onmousemove= null;
document.onmouseup = null;
};
return false;
}; 

}
</script>

</html>
View Code
<!DOCTYPE html>
<html>
<head>
<title>PDemo</title>

</head>
<body>
<div id="test">
<div id="container" style="position:absolute; top:0px;height:535px;width:805px;left:0px; background-color:red;">
<div id="leftPanel" style="position:absolute;top:0px;width:400px;height:535px;left:0px;overflow:hidden;background-color:gray;"></div>
<div id="splitterBar" onmousedown="fnMouseDown(event,200,600,400,400);" style="padding:0px;border:0px;height:100%; left:400px;top:0;width:5px;background-color:black;cursor:w-resize;position:absolute;border-style:solid;"
></div>
<div id="rightPanel" style="position:absolute; left:405px;top:0;height:535px;width:400px;min-width:200px;max-width:600px;overflow:hidden; background-color:green;"></div>
</div>
</div>
</body>
<script type="text/javascript">
function fnMouseDown(ev,minLeftWidth,maxLeftWidth,oriLeftWidth, oriRightWidth){
var splitterBar = document.getElementById('splitterBar');
var leftPanel = document.getElementById('leftPanel');
var rightPanel = document.getElementById('rightPanel');
var container = document.getElementById('container');
var minLeftWidths = minLeftWidth;
var maxLeftWidths = maxLeftWidth;
var origianlLeftWidth = oriLeftWidth;
var originalRightWidth = oriRightWidth;

var left = splitterBar.offsetLeft;
var oWidth = leftPanel.offsetWidth;
var rightLeft = rightPanel.offsetLeft;
var containerWidth = parseInt(container.style.width);
var leftPanelWidth = parseInt(leftPanel.style.width);
var rightPanelWidth = parseInt(rightPanel.style.width);
var splitterBarWidth = parseInt(splitterBar.style.width);

var oEvent = ev || event;
var disX = oEvent.clientX - left;
var disForRightPanel = rightLeft - oEvent.clientX;
document.onmousemove = function (ev){
var oEvent = ev || event

var currentleftWidth = oEvent.clientX - disX;

if(currentleftWidth > maxLeftWidths || leftPanelWidth > maxLeftWidths){
leftPanel.style.width = origianlLeftWidth + 200 + "px";
splitterBar.style.left = origianlLeftWidth + 200 + "px";
rightPanel.style.width = rightPanelWidth - 200 + "px";

} else if(currentleftWidth < minLeftWidths || leftPanelWidth < minLeftWidths) {
leftPanel.style.width = origianlLeftWidth - 200 + "px";
splitterBar.style.left = origianlLeftWidth - 200 + "px";
rightPanel.style.width = originalRightWidth + 200 + "px";
} else {
splitterBar.style.left = oEvent.clientX - disX + 'px';
console.log("splitterBar.style.left is : " + splitterBar.style.left);
leftPanel.style.width = oEvent.clientX - disX + 'px';
//console.log("leftPanel.style.width: " + oEvent.clientX - disX +'sfsdfsdfsd');
rightPanel.style.left = oEvent.clientX - disX + splitterBarWidth + 'px';
/*rightPanel.style.width = (containerWidth - parseInt(rightPanel.style.left)) +    'px';*/
rightPanel.style.width = (containerWidth - (oEvent.clientX - disX) - splitterBarWidth) +'px';
console.log("rightPanel width" + (containerWidth - (oEvent.clientX - disX) - splitterBarWidth));
}
document.onmouseup = function (){
document.onmousemove= null;
document.onmouseup = null;
};
return false;
}; 

}
</script>

</html>
View Code
<html>
    <head>
        <title>Splitter Control</title>
    </head>
    <script src="../package/reactjs/react.js"></script>
    <script src="../package/reactjs/JSXTransformer.js"></script>
    <style type="text/css">
        .container {
            width: 605px;
            height: 300px;
            height: 300px;
            margin: 0 auto 0 auto;
            margin-top: 50px;
            border: solid 1mm yellow;
        }
        .left-panel {
            width: 300px;
            height: 300px;
            float: left;
            background: grey;
        }
        .right-panel {
            width: 300px;
            height: 300px;
            float: right;
            background: green;
        }
        
        
    </style>
    <body>
        <div id="container" class="container">
            <div id="leftPanel" class="left-panel">Left</div>
            <div id="rightPanel" class="right-panel">Right</div>
        </div>
        <script type="text/jsx">
            var disX = 0;
            var isBegin = false;
            var Splitter = React.createClass({
             getInitialState: function()
             {
                 var left = document.getElementById(this.props.leftPanel);
                 var right = document.getElementById(this.props.rightPanel);
                 left.style.width = "100%";
                 right.style.width = "100%";
                 right.style.height = "100%";
                 return {
                      originalLeftWidth: this.props.originalLeftWidth,
                      originalLeftHeight: this.props.originalLeftHeight,
                      originalSplitterWidth: this.props.originalSplitterWidth,
                      originalSplitterHeight: this.props.originalSplitterHeight,
                      originalRightWidth: this.props.originalRightWidth,
                      originalRightHeight: this.props.originalRightHeight,
                      currentLeftWidth: this.props.originalLeftWidth,
                      currentSplitterLeft: this.props.originalLeftWidth,
                      currentRightWidth: this.props.originalRightWidth,
                      currentRightLeft: this.props.originalLeftWidth + this.props.originalSplitterWidth,
                      leftPanel: left,
                      rightPanel:right,
                      currentSplitterBackgroundColor: 'blue'
                 };
             },
             
             onMouseMove: function(ev){
                 ev.preventDefault();
                 if(isBegin == true)
                 {
                     var currLeftWidth = ev.clientX - disX;
                     if(currLeftWidth > this.props.maxLeftWidth || this.state.currentLeftWidth > this.props.maxLeftWidth)
                     {
                         var cuRightWidth = this.props.originalRightWidth + this.props.originalLeftWidth - this.props.maxLeftWidth;
                         this.setState({
                              currentLeftWidth:this.props.maxLeftWidth,
                              currentSplitterLeft:this.props.maxLeftWidth,
                              currentRightWidth:cuRightWidth,
                              currentSplitterBackgroundColor: 'black'
                         });
                     } else if(currLeftWidth < this.props.minLeftWidth || this.state.currentLeftWidth < this.props.mixLeftWidth) {
                         var cuRightWidth = this.props.originalRightWidth + this.props.originalLeftWidth - this.props.minLeftWidth;
                         this.setState({
                              currentLeftWidth:this.props.minLeftWidth,
                              currentSplitterLeft:this.props.minLeftWidth,
                              currentRightWidth:cuRightWidth,
                              currentSplitterBackgroundColor: 'black'
                         });
                     } else {
                             var cuRightWidth = this.props.originalLeftWidth + this.props.originalRightWidth - currLeftWidth;
                             this.setState({
                                  currentLeftWidth:currLeftWidth,
                                  currentSplitterLeft:currLeftWidth,
                                  currentRightWidth:cuRightWidth,
                                  currentSplitterBackgroundColor: 'black'
                             });
                     }
                 }
             },
             
             onMouseUp: function(){
                 isBegin = false;
                 disX = 0;
                 this.setState({
                      currentSplitterBackgroundColor: 'blue'
                 }); 
                 document.body.removeEventListener("mouseup", this.onMouseUp);
                 document.body.removeEventListener("mousemove", this.onMouseMove);
             },
             
             onMouseOver: function(){
                 this.setState({
                      currentSplitterBackgroundColor: 'black'
                 });
             },
             
             onMouseOut: function(){
                 this.setState({
                      currentSplitterBackgroundColor: 'blue'
                 });
             },
             
             onMouseDown: function(ev){
                 isBegin = true;
                 var splitter = React.findDOMNode(this.refs.splitter);
                 disX = ev.clientX - splitter.offsetLeft;
                 document.body.addEventListener("mouseup", this.onMouseUp);
                 document.body.addEventListener("mousemove", this.onMouseMove);
             },
             
             componentDidMount: function()
             {
                 this.left= this.refs.left.getDOMNode();
                 this.right = this.refs.right.getDOMNode();
                 this.left.appendChild(this.state.leftPanel);
                 this.right.appendChild(this.state.rightPanel);
             },
         
             render: function()
             {
                 return(
                      <div style={{position:'relative'}}>
                          <div id="message-list" ref="left" style={{ float:'left',
                               width:this.state.currentLeftWidth, 
                               height:this.state.originalLeftHeight}}>
                          </div>
                          <div ref="splitter" className='splitter' 
                               style={{  
                                   left:this.state.currentSplitterLeft, 
                                   height:this.state.originalSplitterHeight, 
                                   width:this.props.originalSplitterWidth,
                                   backgroundColor: this.state.currentSplitterBackgroundColor,
                                float: 'left'
                               }} 
                               onMouseDown={this.onMouseDown}
                               onMouseOver={this.onMouseOver}
                               onMouseOut={this.onMouseOut}>
                          </div>
                          <div ref="right" id="right-panel" style={{float:'left',
                               overflow: this.props.overflow,
                               width:this.state.currentRightWidth, 
                               height:this.state.originalRightHeight}}>
                          </div>
                      </div>
                 );
             }
            });
            
            React.render(
                <Splitter
                    originalLeftWidth={300} 
                    originalLeftHeight={300} 
                    originalSplitterWidth={5} 
                    originalSplitterHeight={300} 
                    originalRightWidth={300}
                    originalRightHeight={300} 
                    minLeftWidth={200} 
                    maxLeftWidth={400} 
                    leftPanel={"leftPanel"}
                    rightPanel={"rightPanel"}
                    overflow ={"auto"} />,
                    document.getElementById("container")
            );
        </script>
    </body>
</html>


来自 网易手机号码邮箱 -- 有手机就有网易手机号码邮箱,了解详情>
View Code

 

posted @ 2015-07-10 21:08  种花生的读书人  阅读(277)  评论(0编辑  收藏  举报

该博客仅作为记录笔记,转载随意