代码实现拖拽及吸附功能,具体要求如下

代码实现拖拽及吸附功能,具体要求如下:

  1. 两个绿色方块作为盒子,一个红色方块作为可拖拽方块;
  2. 红块可从上方盒子拖拽到下方盒子中;
  3. 拖拽结束后,红块被吸附到其所在盒子中距离最近的角上。
    在这里插入图片描述
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        body {
            margin: 0;
            padding: 0;
            background: black;
        }

        .div {
            width: 120px;
            height: 120px;
            background: gray;
        }

        #div2 {
            margin-top: 20px;

        }

        #drag {
            background-color: red;
            position: absolute;
            width: 50px;
            height: 50px;
        }
    </style>

</head>

<body>
    <div id="div1" class="div">
        <div id="drag"></div>
    </div>
    <div id="div2" class="div"></div>
    <script type="text/javascript">
        let drag = document.querySelector('#drag')
        let div1 = document.getElementById('div1')
        let div2 = document.getElementById('div2')
        // 记录div1和div2分别距离屏幕的位置
        let div1_top = div1.getBoundingClientRect().top
        let div1_left = div1.getBoundingClientRect().left
        let div2_top = div2.getBoundingClientRect().top
        let div2_left = div2.getBoundingClientRect().left

        // div1和div2所包裹的x,y的取值范围
        let allow_div1 = [div1_left, div1_left + div1.offsetWidth, div1_top, div1.offsetHeight]
        let allow_div2 = [div2_left, div2_left + div2.offsetWidth, div2_top, div2_top + div2.offsetHeight]

        drag.onmousedown = function (e) {

            // 当鼠标移动时给drag确定位置
            document.onmousemove = function (e) {
                drag.style.top = `${e.clientY}px`;
                drag.style.left = `${e.clientX}px`;
            }

            document.onmouseup = function (e) {
                document.onmousemove = null;
                document.onmouseup = null;

                let isputout = true
                // 当鼠标抬起时判断方块所在的位置
                if (e.clientX >= allow_div2[0] && e.clientX <= allow_div2[1]) {
                    if (e.clientY >= allow_div2[2] && e.clientY <= allow_div2[3]) {
                        drag.style.left = `${allow_div2[0]}px`;
                        drag.style.top = `${allow_div2[2]}px`;
                        isputout = false
                    }
                }
                // 若没有放入放回原位
                if (isputout) {
                    drag.style.left = `${allow_div1[0]}px`;
                    drag.style.top = `${allow_div1[2]}px`;
                }
            }
            return false;
        }
    </script>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值