原生js实现拖拽效果

js实现拖拽效果

实现拖拽效果,并解决全选状态(ctrl + A)拖拽问题(当我们拖拽一个网页中的内容时,浏览器会默认去搜索引擎中搜索内容,此时会导致拖拽的异常,这是浏览器的默认行为,可以通过return false取消默认行为,但是对IE8不起作用,调用元素的setcapture()后,这个元素会把下一次所有的鼠标按下的相关事件捕获到自己身上,所以,在IE8中可以给box1设置setcapture()方法,解决默认行为,捕获一次之后)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>day6</title>
    <style>
        #box1 {
            width: 100px;
            height: 100px;
            background-color: aqua;
            position: absolute;
        }
        
        #box2 {
            width: 100px;
            height: 100px;
            background-color: bisque;
            position: absolute;
            left: 200px;
            top: 200px;
        }
    </style>
    <script>
        window.onload = function() {
            //拖拽的流程
            //1、当鼠标按下,开始拖拽
            //2、当鼠标移动时,box1跟着一起移动
            //3、当鼠标松下的时候,box1停在鼠标当前的位置
            //获取box1
            // var box1 = document.getElementById("box1");

            // box1.onmousedown = function(event) {
            //     event = event || window.event;

            //     var left2 = event.clientX - box1.offsetLeft;
            //     var top2 = event.clientY - box1.offsetTop;

            //     box1.setCapture && box1.setCapture(); //解决谷歌兼容问题
            //     document.onmousemove = function(event) {
            //         //处理事件对象兼容问题

            //         event = event || window.event;
            //         var left = event.clientX - left2;
            //         var top = event.clientY - top2;

            //         //alert("left = " + left + ",left2 = " + left2);
            //         box1.style.top = top + "px";
            //         box1.style.left = left + "px";
            //     };
            //     document.onmouseup = function() {
            //         document.onmousemove = null;
            //         document.onmouseup = null;
            //         box1.releaseCapture && box1.releaseCapture(); //解决谷歌兼容问题
            //     };
            //     // 当我们拖拽一个网页中的内容时,浏览器会默认去搜索引擎中搜索内容
            //     //此时会导致拖拽的异常,这是浏览器的默认行为,可以通过return false取消默认行为
            //     return false; //对IE8不起作用
            //     //调用元素的setcapture()后,这个元素会把下一次所有的鼠标按下的相关事件捕获到自己身上,所以
            //     //在IE8中可以给box1设置setcapture()方法,解决默认行为,捕获一次之后



            var box1 = document.getElementById("box1");
            var box2 = document.getElementById("box2");

            drag(box1);
            drag(box2);
            //专门设置拖拽的函数
            function drag(obj) {
                obj.onmousedown = function(event) {
                    event = event || window.event;
                    var left2 = event.clientX - obj.offsetLeft;
                    var top2 = event.clientY - obj.offsetTop;
                    obj.setCapture && obj.setCapture();
                    document.onmousemove = function(event) {
                        event = event || window.event;
                        var left = event.clientX - left2;
                        var top = event.clientY - top2;
                        obj.style.top = top + "px";
                        obj.style.left = left + "px";
                    };
                    document.onmouseup = function() {
                        document.onmousemove = null;
                        document.onmouseup = null;
                        obj.releaseCapture && obj.releaseCapture();
                    };
                    return false;
                }
            };
        };
    </script>
</head>

<body>
    我是文字
    <div id="box1">

    </div>
    <div id="box2">

    </div>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

summer·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值