拖拽事件一

拖拽事件一
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>拖拽练习</title>
    <style>
        #box1 {
            width: 100px;
            height: 100px;
            background-color: red;
            position: absolute;
        }

        #box2 {
            width: 100px;
            height: 100px;
            background-color: yellow;
            position: absolute;
            left: 100px;
            top: 200px;
        }
    </style>

    <script>
        window.onload = function () {
            /**
             * 拖拽box1元素
             *      -拖拽流程
             *          1.当鼠标在被拖拽元素按下时开始拖拽onmousedown
             *          2.当鼠标移动时被拖拽元素跟随鼠标移动onmousemove
             *           3.当鼠标松开时,拖拽元素固定在当前位置onmouseup
             */
            var box1 = document.getElementById("box1");
            box1.onmousedown = function () {
                /*为document绑定onmousemove事件,如果给box1绑定,就无法向上移动,
                向上移动就出盒子了*/
                document.onmousemove = function (event) {
                    event = event || window.event;
                    //当鼠标移动时被拖拽元素跟随鼠标移动onmousemove
                    var left = event.clientX;
                    var top = event.clientY;
                    //修改滚动条位置
                    box1.style.left = left + "px";
                    box1.style.top = top + "px";
                };

                //绑定鼠标松开事件,还是要给document绑定,如果给box1绑定
                //box1被box2盖住,如果要在此处放下,box1和box2是兄弟,无法冒泡
                //就无法松开,但是完全被盖住也无法再次拖动
                document.onmouseup = function () {
                    //将事件设置为空,取消onmousemove事件。
                    document.onmousemove = null;
                    //将事件设置为空,取消onmouseup事件。
                    document.onmouseup = null;  
                };

            };


        };
    </script>
</head>
<body>
<div id="box1"></div>
<div id="box2"></div>
</body>
</html>

在这里插入图片描述

在这里插入图片描述

改进点和注意点:

1.如上图,重叠部分无法拖拽,需要改进

2.拖拽时,鼠标默认总在盒子左上角,不会随着方向移动,卡顿感。

3.事件的绑定有的需要给document页面,而非全部盒子。

4.事件的取消将其设置为null.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值