首页 > web前端 > js教程 > 正文

js 分栏效果实现代码_javascript技巧

php中文网
发布: 2016-05-16 18:47:27
原创
1873人浏览过

网上我也见到一些分栏效果,也有一个jquery的插件jquery.splitter.js, 但是他们基本都没有解决一个问题:如果页面上有iframe, 当拖动分割线经过iframe的时候,鼠标不听使唤了,我曾经开过帖子讨论过这个问题。本例采用一个小技巧解决了这个问题,使拖动流畅。

AI-Text-Classifier
AI-Text-Classifier

OpenAI官方出品,可以区分人工智能书写的文本和人类书写的文本

AI-Text-Classifier 59
查看详情 AI-Text-Classifier
复制代码 代码如下:



Splitter demo

<script> <BR>/* <BR>* splitter.js <BR>* author: sunxing007 <BR>* http://blog.csdn.net/sunxing007 <BR>* date: 08/26/2009 <br><br>************************************************************************************** <BR>The css script below is needed for the html page when using splitter.js, please save <BR>it as splitter.css, and modify it carefully. <BR>************************************************************************************** <BR>#splitter_container{ <BR>width: 100%; <BR>height: 100%; <BR>border: solid #eee 1px; <BR>margin: 0px; <BR>padding: 0px; <BR>overflow: hidden; <BR>} <BR>#splitter_left_panel{ <BR>width: 300px; <BR>height: 100%; <BR>float: left; <BR>border: solid blue 0px; <BR>} <BR>#splitter_bar{ <BR>width: 8px; <BR>height: 100%; <BR>float: left; <BR>background-color: #ccc; <BR>cursor: col-resize; <BR>} <BR>#splitter_right_panel{ <BR>height: 100%; <BR>padding-top: 10px; <BR>} <BR>************************************************************************************** <BR>How to use this splitter? <BR>************************************************************************************** <BR><!-- <BR> <html> <BR><head> <BR><title>Splitter demo <BR><link href="splitter.css" type="text/css" rel="stylesheet" /> <BR><script src="splitter.js"></script>




left panel




right panel





-->
**************************************************************************************
*/

/** 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;
Splitter.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 Splitter.lPanelMinWidth : w));
        w = _width;
}
Splitter.lPanel.style.width = w;
    }
};



    

            

                
            

            

            

                    在此处右键察看源代码并把其中的js保存为splitter.js

                    splitter.js使用方法:

                    页面上需要有一个div作为容器(id=splitter_container): 可拖动效果就在这个容器里面进行

                    容器里面需要有3个div,分别代表左栏(id=splitter_left_panel),分割线(id=splitter_bar), 右栏(id=splitter_right_panel)

                    这4个div需要用css修饰一下

                     <br>#splitter_container{ <br>width: 100%; <br>height: 100%; <br>border: solid #eee 1px; <br>margin: 0px; <br>padding: 0px; <br>overflow: hidden; <br>}<br><br>#splitter_left_panel{ <br>width: 300px; <br>height: 100%; <br>float: left; <br>border: solid blue 0px; <br>}<br><br>#splitter_bar{ <br>width: 8px; <br>height: 100%; <br>float: left; <br>background-color: #ccc; <br>cursor: col-resize; <br>}<br><br>#splitter_right_panel{ <br>height: 100%; <br>padding-top: 10px; <br>} <br>



给body加上onload事件处理函数,以触发splitter:

onload="Splitter.init({id: 'splitter_Container', isWidthLimit: true});"

Splitter的init方法传入一个json对象作为配置参数,其中容器id是必需的.

还可以配置更多的参数, 比如:

isWidthLimit: 可选值true, false, 设置左面板是否限制宽度;

lPanelMaxWidth: 左面板最大宽度,比如: 500px;

lPanelMinWidth: 左面板最小宽度,比如: 100px;

barActiveColor: 分割线拖动的时候的颜色: 比如'red', '#0080ff';

更多web开发相关的内容就在blog.csdn.net/sunxing007    
            

    


java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号