拖拽事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #box1{
             100px;
            height: 100px;
            background-color: red;
            position: absolute;
        }
        #box2{
             100px;
            height: 100px;
            background-color: yellow;
            position: absolute;
            left: 200px;
            top: 200px;
        }
    </style>
    <script>
        window.onload=function(){
            /* 
                拖拽box1的元素
                    -拖拽的流程
                    1.当鼠标在被拖拽元素上按下时,开始拖拽 onmousedown
                    2.当鼠标移动时被拖拽元素跟随鼠标移动 onmousemove
                    3.当鼠标松开时,被拖拽元素固定在当前位置 onmouseup
            */
            // 获取box1
            var box1=document.getElementById("box1");
            var box2=document.getElementById("box2");
            var img=document.getElementById("img");

        //开启box1的拖拽
        drag(box1);
        drag(box2);
        drag(img);

           
        };


        /* 
            提取一个专门用来设置拖拽的函数
            参数:开启拖拽的元素
        */
       function drag(obj){
            // 当鼠标在被拖拽元素上按下时,开始拖拽 onmousedown
            obj.onmousedown=function(event){


                // 设置box1捕获所有鼠标按下的事件
                /* 
                    setCapture()
                    - 只有IE支持,但是在火狐浏览器中调用时不会报错,而如果使用chrome调用,会报错
                */
                /* if(box1.setCapture){
                box1.setCapture();
                } */
                obj.setCapture&&box1.setCapture();
                event=event||window.event;
                // div的偏移量 鼠标.clientX - 元素.offsetLeft
                // div的偏移量 鼠标.clientY - 元素.offsetTop
                var ol=event.clientX-obj.offsetLeft;
                var ot=event.clientY-obj.offsetTop;


                // 为document绑定一个onmousemove事件
                document.onmousemove=function(event){
                    event=event||window.event;
                // 当鼠标移动时被拖拽元素跟随鼠标移动 onmousemove
                // 获取鼠标的坐标
                var left=event.clientX-ol;
                var top=event.clientY-ot;
                // 修改box1的位置
                obj.style.left=left+"px";
                obj.style.top=top+"px";
                };
                //  为document绑定一个鼠标松开事件
                document.onmouseup=function(){
                // 当鼠标松开时,被拖拽元素固定在当前位置 onmouseup
                //  取消document的onmousemove事件
                document.onmousemove=null;
                // 取消document的onmouseup事件
                document.onmouseup=null;
                // 当鼠标松开时,取消对事件的捕获
                obj.releaseCapture&&obj.releaseCapture();
                };

                /* 
                当我们拖拽一个网页中的内容时,浏览器会默认去搜索引擎中搜索内容,
                此时会导致拖拽功能的异常,这个是浏览器提供的默认行为,
                如果不希望发生这个行为,则可以通过return false来取消默认行为

                但是这招对IE8不起作用
                */
                return false;
                };
       }
    </script>
</head>
<body>
    我是一段文字
    <div id="box1"></div>
    <div id="box2"></div>
    <img src="./img/1.png" id="img" style="position: absolute;">
</body>
</html>

 

原文地址:https://www.cnblogs.com/hr-7/p/14173039.html