js分栏效果(转)

<html> 
<head> 
<title>Splitter demo</title> 
<style> 
            #splitter_container{  
                    width: 100%;  
                    height: 100%;  
                    border: solid #eee 1px;  
                    margin: 0px;  
                    padding: 0px;  
                    overflow: hidden;  
            }  
            #splitter_left_panel{  
                    width: 300px;  
                    height: 100%;  
                    float: left;  
                    border: solid blue 0px;  
            }  
            #splitter_bar{  
                    width: 8px;  
                    height: 100%;  
                    float: left;  
                    background-color: #ccc;  
                    cursor: col-resize;  
            }  
            #splitter_right_panel{  
                    height: 100%;  
                    padding-top: 10px;  
            }  
</style> 
<script> 
/*  
 * splitter.js  
 * author: sunxing007  
 * http://blog.csdn.net/sunxing007  
 * date: 08/26/2009  
   
 **************************************************************************************  
  The css script below is needed for the html page when using splitter.js, please save  
  it as splitter.css, and modify it carefully.  
 **************************************************************************************  
#splitter_container{  
        width: 100%;  
        height: 100%;  
        border: solid #eee 1px;  
        margin: 0px;  
        padding: 0px;  
        overflow: hidden;  
}  
#splitter_left_panel{  
        width: 300px;  
        height: 100%;  
        float: left;  
        border: solid blue 0px;  
}  
#splitter_bar{  
        width: 8px;  
        height: 100%;  
        float: left;  
        background-color: #ccc;  
        cursor: col-resize;  
}  
#splitter_right_panel{  
        height: 100%;  
        padding-top: 10px;  
}  
 **************************************************************************************  
  How to use this splitter?  
 **************************************************************************************  
 <!--  
      <html> 
        <head> 
            <title>Splitter demo</title> 
            <link href="splitter.css" type="text/css" rel="stylesheet" /> 
            <script src="splitter.js"></script> 
        </head> 
        <body onload="Splitter.init({id: 'splitter_Container'});"> 
            <div id="splitter_container"> 
                <div id="splitter_left_panel"> 
                    left panel  
                    <!--you can put any html code here--> 
                </div> 
                <div id="splitter_bar"></div> 
                <div id="splitter_right_panel"> 
                    right panel  
                    <!--you can put any html code here--> 
                </div> 
            </div> 
        </body> 
    </html> 
    --> 
 **************************************************************************************  
*/  
 
/** this is a helper function used to get the dom element specified by id **/  
 
function $(id){return document.getElementById(id);}  
 
/** the main functionality of splitter **/  
 
var Splitter = {  
    container: null,  
    lPanel: null,  
    rPanel: null,  
    bar: null,  
  movingBar: null,  
  //左面板初始,最大,最小宽度  
    lPanelInitWidth: '250px',  
    lPanelMaxWidth: '500px',   
    lPanelMinWidth: '200px',  
    rPanelInitWidth: '800px',  
    rPanelMaxWidth: '999px',  
    rPanelMinWidth: '500px',  
    //分隔线被拖动的时候的颜色  
    barActiveColor: '#0080ff',  
    //左面的面板是否设置最大/最小宽度  
    isWidthLimit: true,  
    init: function(config){  
        if(!config.id){  
            alert('Can not initialize splitter.');  
            return;  
        }  
        if($(config.id)){  
            this.container = $(config.id);  
            if(!($('splitter_left_panel')&&$('splitter_right_panel')&&$('splitter_bar'))){  
                alert('Can not initialize splitter.');  
                return;  
            }  
            else{  
                this.lPanel = $('splitter_left_panel');  
                this.rPanel = $('splitter_right_panel');  
                this.bar = $('splitter_bar');  
            }  
        }  
          
        if(config.lPanelMaxWidth){  
            this.lPanelMaxWidth = config.lPanelMaxWidth;  
        }  
        if(config.lPanelMinWidth){  
            this.lPanelMinWidth = config.lPanelMinWidth;  
        }  
        if(config.rPanelMaxWidth){  
            this.rPanelMaxWidth = config.rPanelMaxWidth;  
        }  
        if(config.rPanelMinWidth){  
            this.rPanelMinWidth = config.rPanelMinWidth;  
        }  
        if(config.lPanelInitWidth){  
            this.lPanelInitWidth = config.lPanelInitWidth;  
        }  
        if(config.rPanelInitWidth){  
            this.rPanelInitWidth = config.rPanelInitWidth;  
        }  
        if(config.barActiveColor){  
            this.barActiveColor = config.barActiveColor;  
        }  
        //alert(typeof(config.isWidthLimit));  
        if(config.isWidthLimit!=undefined){  
            this.isWidthLimit = config.isWidthLimit;  
        }  
        var mask = document.createElement('div');  
        document.body.appendChild(mask);  
        with(mask.style){  
            position = 'absolute';  
            left = '0px';  
            top = '0px';  
            zIndex = 900;  
            width = '100%';  
            height = '100%';  
            display = 'none';  
            backgroundColor = '#ccc';  
            filter = 'alpha(opacity=10)';  
        }  
        //background-color:red;filter:alpha(opacity=60)  
        Splitter.mask = mask;  
        this.bar.onmousedown = Splitter.start;  
    },  
    start: function(){  
        var o = Splitter.container;  
        o.lastMouseX = event.x;  
        Splitter.mask.style.display = '';  
        var movingBar = document.createElement('div');  
        Splitter.container.appendChild(movingBar);  
        with(movingBar.style){  
            position = 'absolute';  
            left = Splitter.bar.offsetLeft + 'px';  
            top = '0px';  
            width = Splitter.bar.currentStyle.width;  
            height = '100%';  
            backgroundColor = Splitter.barActiveColor;  
            zIndex = 999;  
            cursor = 'col-resize';  
        }  
        movingBar.dx = 0;  
        Splitter.movingBar = movingBar;  
        document.onmousemove = Splitter.move;  
        document.onmouseup = Splitter.end;  
    },  
    move: function(){  
        var o = Splitter.container;  
        var dx = event.x - o.lastMouseX;  
        SplitterSplitter.movingBar.dx = Splitter.movingBar.dx + dx;  
        var left = parseInt(Splitter.movingBar.style.left) + dx;  
        Splitter.movingBar.style.left = left;  
        o.lastMouseX = event.x;  
    },  
    end: function(){  
        document.onmousemove = null;  
        document.onmouseup = null;  
        Splitter.mask.style.display = 'none';  
        var dx = Splitter.movingBar.dx;  
        Splitter.container.removeChild(Splitter.movingBar);  
        var w = parseInt(Splitter.lPanel.currentStyle.width) + dx;  
        if(Splitter.isWidthLimit){  
                var _width = (w > parseInt(Splitter.lPanelMaxWidth) ? Splitter.lPanelMaxWidth : (w < parseInt(Splitter.lPanelMinWidth) ? Splitter.lPanelMinWidth : w));  
                w = _width;  
        }  
        Splitter.lPanel.style.width = w;  
    }  
};  
</script> 
</head> 
<body onload="Splitter.init({id: 'splitter_Container', isWidthLimit: true});"> 
    <div id="splitter_container"> 
            <div id="splitter_left_panel"> 
                <iframe frameborder="0" height="100%" id="" width="100%" src="Splitter的init方法传入一个json对象作为配置参数,其中容器id是必需的.<br> 
还可以配置更多的参数, 比如:<br> 
isWidthLimit: 可选值true, false, 设置左面板是否限制宽度;<br> 
lPanelMaxWidth: 左面板最大宽度,比如: 500px;<br> 
lPanelMinWidth: 左面板最小宽度,比如: 100px;<br> 
barActiveColor: 分割线拖动的时候的颜色: 比如'red', '#0080ff';<br> 
更多web开发相关的内容就在<a href='http://blog.csdn.net/sunxing007'>blog.csdn.net/sunxing007</a>      
            </div> 
    </div> 
</body> 
</html> 


本文来自CSDN博客,转载请标明出处:
http://blog.csdn.net/sunxing007/archive/2009/08/28/4492453.aspx

posted on 2009-12-14 11:17  满汗全席  阅读(2230)  评论(0编辑  收藏  举报

导航