js 实现分割条

js 实现 切分条效果, 为了熟悉js  写法,纯javascript 脚本编写

简单介绍几个函数:

setCapture()函数的作用就是将后续的mouse事件都发送给这个对象,

releaseCapture() 就是将鼠标事件还回去

由document、window、object之类的自行来处理,这样就保证了在拖动的过程中,不会由于经过了其它的元素而受到干扰。另外,还有一个很重 要的事情是,在Win32上,mouse move的事件不是一个连续的,也就是说,并不是我们每次移动1px的鼠标指针,就会发生一个mousemove,windows会周期性检查mouse的位置变化来产生mousemove的事件。所以,如果是一个很小的页面对象,比如一个直径5px的圆点,如果没有setCapture和releaseCapture,那么在鼠标按住之后,快速的移动鼠标,就有可能鼠标移动走了,但是小圆点还在原地,就是因为下一次的mousemove事 件已经不再发给这个圆点对象了。

var siblingElem = function (elem)
{
    var _nodes = [];

    while ((elem = elem.previousSibling))
    {
        if (elem.nodeType === 1)
        { _nodes.push(elem); break; }
    }
    return _nodes[0];
}
var nextElem = function (elem)
{
    var _nodes = [];
    while ((elem = elem.nextSibling))
    {
        if (elem.nodeType === 1)
        { _nodes.push(elem); break; }
    }
    return _nodes[0];
}

获取相邻两个左右两个元素

为了方便运用编写一个js 对象

主要方法:根据鼠标移动的坐标计算左右两边容器的宽度

move = function (event, f)
    {
        if (f.flag)
        {
            if (f.iPner2With - event.clientX - f.ele.offsetWidth > 0)
            {
                f.objLeft.style.left = (event.clientX + f.ele.offsetWidth) + "px";
                f.objRight.style.width = (f.iPner2With - event.clientX - f.ele.offsetWidth) + "px";
                f.objLeft.style.width = event.clientX + "px";

            }
            if (!f.ele.releaseCapture)
            {
                event.preventDefault();
            }
        }
    }

/****************************************

@Name:LR_spliter 实现table 和div 分割条效果
@Author:胡泽云
@Date:2014-08-27
@邮箱:[email protected]
@qq:984559465
@说明: 实例化 new  LR_spliter("控件id")

*/
var siblingElem = function (elem)
{
    var _nodes = [];

    while ((elem = elem.previousSibling))
    {
        if (elem.nodeType === 1)
        { _nodes.push(elem); break; }
    }
    return _nodes[0];
}
var nextElem = function (elem)
{
    var _nodes = [];
    while ((elem = elem.nextSibling))
    {
        if (elem.nodeType === 1)
        { _nodes.push(elem); break; }
    }
    return _nodes[0];
}
zy_spliter = function (id)
{
    this.flag = false;
    this.objSplitter = false;
    this.iPner2With = 0;

    //获取对象的左右连个容器
    this.ele = document.getElementById(id);
    this.objLeft = siblingElem(this.ele);
    this.objRight = nextElem(this.ele);
    this.ele.style.cursor = "w-resize"; //设置鼠标样式
    up = function (event, t)
    {
        if (t.flag)
        {
            if (t.ele.releaseCapture)
            {
                t.ele.releaseCapture();
            }
            else
            {
                document.removeEventListener(‘mouseup‘, t.up, true);
                document.removeEventListener(‘mousemove‘, t.move, true);
                event.preventDefault();
            }

            t.flag = false;
        }
    };
    down = function (event, f)
    {

        if (!f.flag)
        {
            if (f.ele.setCapture)
                f.ele.setCapture();
            else
            {
                document.addEventListener(‘mouseup‘, up, true);
                document.addEventListener(‘mousemove‘, move, true);
                event.preventDefault();
            }

            f.flag = true;

            if (f.ele.parentNode.tagName == "TD")
            {
                f.iPner2With = f.ele.parentNode.parentNode.offsetWidth;
            }
            else
            {
                f.iPner2With = f.ele.parentNode.offsetWidth;
            }

        }
    };
    move = function (event, f)
    {

        if (f.flag)
        {

            if (f.iPner2With - event.clientX - f.ele.offsetWidth > 0)
            {
                f.objLeft.style.left = (event.clientX + f.ele.offsetWidth) + "px";
                f.objRight.style.width = (f.iPner2With - event.clientX - f.ele.offsetWidth) + "px";
                f.objLeft.style.width = event.clientX + "px";
            }
            if (!f.ele.releaseCapture)
            {
                event.preventDefault();
            }
        }
    }
    var t = this;
    this.ele.onmousedown = function ()
    {
        down(event, t);
    }

    this.ele.onmouseup = function ()
    {
        up(event, t);
    }

    this.ele.onmousemove = function ()
    {
        move(event, t);
    }
    return this;

}

所有代码

实现效果: 第一种左右两边容器是div  , 第二种 是分割table 单元格的效果

前台html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <script type="text/javascript" src="../Js/zeyun_spliter.js"></script>
    <script type="text/javascript">
        window.onload = function ()
        {
            var lsp = new zy_spliter("soliterSS");
            var lsp2 = new zy_spliter("sp2");
        }
       
    </script>
</head>
<body>
    <div style="height: 100px; width: 900px;">
        <div style="width: 450px; float: left; background: red; height: 100%; word-break: break-all;
            word-wrap: break-word;">
            asdsdf
        </div>
        <div id="soliterSS" style="width: 4px; height: 100%; float: left; ">
        </div>
        <div style="width: 442px; float: left; background: blue; height: 100%; position: relative;
            word-break: break-all; word-wrap: break-word;">
            adsfadsfjkl</div>
    </div>
    <p> table</p>
    <table style="height: 100px; width: 900px;" cellspacing="0" cellpadding="0">
        <tr>
            <td style="">
            </td>
            <td id="sp2" style="width: 4px; height: 100%; ">
                <div style="height: 100%;">
                </div>
            </td>
            <td style="">
            </td>
        </tr>
    </table>
</body>
</html>

时间: 2024-12-06 00:37:28

js 实现分割条的相关文章

js控制进度条到达100%跳转界面一

进度条一般在手机上用到的比较广泛,刚好最近的项目也是一直在做手机站,这个特效是手机端的一个界面,现在我把改成pc端了,进度条的快慢速度和样式可自行调节,改动也是很方便的,不多说,看代码: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>js控制进度条到达100%跳转界面</title></head>

iOS8 UITableView 分割条设置separator intent = 0 不起作用

ios7的时候在storyboard 设置 TableView的separator intend = 0 可以让tableview的分割条顶到头. 但是,升级了iOS8时,发现不起作用了. 经过google,在 stackoverflow 发现了答案 翻译纪录一下 iOS8 在cell和tableview中都引入了layoutMargins属性,而且这个属性在iOS 7中并没有,所以你需要区别对待这两个版本. 使用 Ricky 的方案设置cell中的layoutMargin属性: -(void)

JS实现导航条效果——current跟随鼠标hover移动

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

随笔 JS 字符串 分割成字符串数组 并动态添加到指定ID的DOM 里

JS /* * 字符串 分割成字符串数组 并动态添加到指定ID的DOM 里 * @id 要插入到DOM元素的ID * * 输入值为图片URL 字符串 * */ function addImages(id){ /*字符串 变量*/ var images='{$content.pictureurl} ' ; /* console.log( images ) ;*/ /*字符串分割成字符串数组 split*/ var StringArray = images.split(','); /* consol

mfc分个窗口,设置分割条不可移动

最近要做一个项目,做界面时遇到了这个问题,找了好多资料,终于解决了,在此记录一下,希望对有需要的人有所帮助.好了,不多说了,具体的处理如下: 新建一个类CFixSplitterWnd继承CSplitterWnd,添加 ON_WM_LBUTTONDOWN() ON_WM_SETCURSOR() ON_WM_MOUSEMOVE() 三个消息的响应,主要代码如下: 头文件 1 protected: 2 afx_msg void OnLButtonDown(UINT nFlags, CPoint pt)

js 实现进度条功能。

/** * 纯js进度条 * Created by kiner on 15/3/22. */ function progress(options){ this.w = (options && options.width)?parseFloat(options.width) : parseFloat(this.options.width); this.h = (options && options.height)?parseFloat(options.height) : pa

js加载条

<html xmlns="http://www.w3.org/1999/xhtml"><head>    <meta http-equiv="X-UA-Compatible" content="IE=9" />    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   

js 设置多条css样式

如果在一个网页中给id="mydiv"的元素添加css样式,先获取该节点:var obj = document.getElementById("mydiv");给节点添加css:如果需要添加的css不多的话,可以obj.style.width = "300px";如果需要添加多条css语句的话,这样会有多条,如:obj.style.width="300px";obj.style.height="300px"

143行js顶部进度条最小插件-nanobar.js源码解析

网页顶部进度条插件的有四五种,基本原理就是动态地创建一个元素,然后通过设置它的width来实现动画效果,width增长到达指定位置时,将其去掉.来看看nanobar.js作者jacoborus是怎么做到的吧! /* http://nanobar.micronube.com/ || https://github.com/jacoborus/nanobar/ MIT LICENSE */ (function (root) { 'use strict' // container styles var