DOM拖拽事件源码

本文详细探讨了JavaScript中的DOM拖拽事件,包括如何设置拖放区域、处理拖动开始、拖动中和拖动结束的事件,以及CSS在美化拖拽效果中的应用。通过实例解析,揭示了DOM拖拽操作的底层工作原理和实践技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #box1 {
            width: 100px;
            height: 100px;
            background-color: #bfa;
            position: absolute;
        }

        #box2 {
            width: 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")
            //为box1绑定鼠标按下事件
            // 1、当鼠标在被拖拽元素上按下时,开始拖拽(onmousedown)
            box1.onmousedown = function (event) {
                event = event || window.event
                //求出div的偏移量,鼠标.clentX - 元素.offsetLeft
                var ol = event.clientX - box1.offsetLeft
                //求出div的偏移量,鼠标.clentY - 元素.offsetTop
                var ot = event.clientY - box1.offsetTop

                // 2、当鼠标移动时被拖拽元素跟随鼠标移动(onmousemove)
                //为document来绑定onmousemove事件
                document.onmousemove = function (event) {
                    event = event || window.event
                    // 3、当鼠标松开时,被拖拽元素固定在当前位置(onmouseup)
                    //获取鼠标的坐标
                    var left = event.clientX - ol
                    var top = event.clientY - ot

                    //修改box1的位置
                    box1.style.left = left + "px"
                    box1.style.top = top + "px"
                }

                //为元素绑定一个鼠标松开事件
                document.onmouseup = function () {
                    //3、当鼠标松开时,被拖拽元素固定在当前位置(onmouseup)

                    //取消onmousemove事件
                    document.onmousemove = null
                    //取消onmouseup事件
                    document.onmouseup = null

                    // alert("鼠标松开了")
                }
            }
        }
    </script>
</head>

<body>
    <div id="box1"></div>

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

</html>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

想要成为码农

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

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

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

打赏作者

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

抵扣说明:

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

余额充值