• js实现可拖拽的div


    实现一个div可以被拖拽,代码如下所示:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>zzw_drap</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
            #box {
                position: absolute;
                top: 100px;
                left: 200px;
                 500px;
            }
            #bar {
                padding-left:50px; 
                height: 50px;
                line-height: 50px;
                color: white;
                background-color: #aaa;
                cursor: move;
            }
            #content {
                padding:30px 0 0 50px ;
                height: 300px;
                background-color: #eee;
            }
        </style>
    </head>
    <body>
        <div id="box">
            <div id="bar">可拖拽头部</div>
            <div id="content">这里是内容</div>
        </div>
    
        <script>
    
    
        /*
        * zzw.drag 2017-3
        * js实现div可拖拽
        * @params bar 可以点击拖动的元素
        * @params box 拖动的整体元素 必须是position: absolute;
        * 思想:鼠标的clienX/clientY相对值设置为父元素的left/top的相对值
        */
    
        var dragBox = function (drag, wrap) {
    
           function getCss(ele, prop) {
                return parseInt(window.getComputedStyle(ele)[prop]);
           }
    
           var initX,
               initY,
               dragable = false,
               wrapLeft = getCss(wrap, "left"),
               wrapRight = getCss(wrap, "top");
    
           drag.addEventListener("mousedown", function (e) {
                dragable = true;
                initX = e.clientX;
                initY = e.clientY;
           }, false); 
    
          document.addEventListener("mousemove", function (e) {
                if (dragable === true ) {
                    var nowX = e.clientX,
                        nowY = e.clientY,
                        disX = nowX - initX,
                        disY = nowY - initY;
                    wrap.style.left = wrapLeft + disX + "px";
                    wrap.style.top = wrapRight + disY + "px";
                }
           });
    
           drag.addEventListener("mouseup", function (e) {
                dragable = false;
                wrapLeft = getCss(wrap, "left");
                wrapRight = getCss(wrap, "top");
           }, false); 
    
        };
    
        dragBox(document.querySelector("#bar"), document.querySelector("#box"));
        </script>
    </body>
    </html>

    其中我们可以直接使用封装好的函数,它接受两个参数,第一个是可以点击拖拽的元素,第二个是父元素。  注意:父元素的postion设置为 absolute才可以使用。

    2017年8月31日更新:

    这里的mousemove的监听对象修改为了document,否则,如果我们拖拽速度太快,会出现bug,即可能鼠标脱离了wrap,然后这时就会出现问题,而如果修改为了document,问题几乎得到了解决。

  • 相关阅读:
    c++中为什么static成员函数不能声明为const
    VS 如何查看反汇编代码?
    Algorithm: 获取指定范围的随机数(包含范围临界值)
    Windows2003防黑客入侵:系统权限与安全配置
    nc使用方法
    突破安全狗的技术总汇
    入侵检测经验总结
    Temporary failure in name resolution:Illegal seek(转)
    各种在线编辑器漏洞
    Linux加固
  • 原文地址:https://www.cnblogs.com/zhuzhenwei918/p/6569295.html
Copyright © 2020-2023  润新知