原生js实现div在指定区域内拖拽移动

直接上代码

可拖拽div元素在指定区域内移动,不会超出区域

<!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>div 在指定区域内移动</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    html,
    body {
      height: 100%;
    }

    #parent {
      position: relative;
      width: 700px;
      height: 470px;
      background: gray;
    }

    #children {
      position: absolute;
      width: 100px;
      height: 100px;
      background-color: antiquewhite;
      cursor: move;
    }
  </style>
</head>

<body>
  <div id="parent">
    <div id="children"></div>
  </div>
  <script>
    window.onload = function () {
      var parentNode = document.getElementById("parent");
      var childrenNode = document.getElementById("children");
      var disX = 0;
      var disY = 0;
      childrenNode.onmousedown = function (ev) {
        //鼠标事件对象
        var oEvent = ev || event;
        disX = oEvent.clientX - childrenNode.offsetLeft;
        disY = oEvent.clientY - childrenNode.offsetTop;

        document.onmousemove = function (ev) {
          //鼠标事件对象
          var oEvent = ev || event;
          var l = oEvent.clientX - disX;
          var t = oEvent.clientY - disY;

          if (l < 50) {
            l = 0;
          } else if (l > parentNode.clientWidth - childrenNode.offsetWidth) {
            l = parentNode.clientWidth - childrenNode.offsetWidth;
          }
          if (t < 50) {
            t = 0;
          } else if (t > parentNode.clientHeight - childrenNode.offsetHeight) {
            t = parentNode.clientHeight - childrenNode.offsetHeight;
          }

          childrenNode.style.left = l + "px";
          childrenNode.style.top = t + "px";

          /**如果父盒子设置有marginTop和marginLeft则需要将其设置为0*/
          childrenNode.style.marginLeft = 0;
          childrenNode.style.marginTop = 0;
        }
        document.onmouseup = function () {
          document.onmousemove = null;
          document.onmouseup = null;
        }

        //阻止默认事件
        return false;
      }

    }
  </script>
</body>

</html>

截图

效果截图

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值