js实现元素可拖拽方法

 业务需要:Vue+element plus实现对弹框进行拖拽,并可拖拽到显示页面的外面,而element提供的拖拽只能在当前页面不可超出。所以手写了拖拽方法。

实现效果

对元素进行拖拽

 拖拽方法
     function dragElement(ele) {
        ele.addEventListener("mousedown", function (e) {
          // 取消浏览器默认事件
          e.preventDefault();

          // 存储鼠标位置
          var mouseX = e.clientX;
          var mouseY = e.clientY;

          // 存储元素当前位置
          var initX = draggableElement.offsetLeft;
          var initY = draggableElement.offsetTop;

          // 添加鼠标移动事件监听器
          document.addEventListener("mousemove", onMouseMove);
          // 添加鼠标抬起事件监听器
          document.addEventListener("mouseup", onMouseUp);

          function onMouseMove(e) {
            // 计算鼠标移动的距离
            var deltaX = e.clientX - mouseX;
            var deltaY = e.clientY - mouseY;

            if (window.innerWidth - 20 > e.clientX && e.clientX > 20) {
              // 将元素移动到新的位置,这里的加上deltaX和deltaY是因为我们需要将元素移动到鼠标点击位置的右边和下边
              draggableElement.style.left = initX + deltaX + "px";
            }

            if (window.innerHeight - 20 > e.clientY && e.clientY > 20) {
              draggableElement.style.top = initY + deltaY + "px";
            }
          }

          function onMouseUp() {
            // 移除鼠标移动和抬起事件监听器
            document.removeEventListener("mousemove", onMouseMove);
            document.removeEventListener("mouseup", onMouseUp);
          }
        });
      }

对方法进行使用

<div
      id="box"
      style="
        width: 100px;
        height: 100px;
        background-color: brown;
        position: absolute;
      "
></div>

<script>
 const draggableElement = document.querySelector("#box");
 dragElement(draggableElement)
</script>

注意:绑定的元素一定要设置css样式“position: absolute;”,父元素可设置“overflow: hidden”,防止出现滚动条。 

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值