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”,防止出现滚动条。 

相关推荐

  1. js实现元素方法

    2023-12-07 17:44:05       47 阅读
  2. React 元素教程 react-dnd 实现

    2023-12-07 17:44:05       37 阅读
  3. js实现快速(定时器版本)

    2023-12-07 17:44:05       18 阅读
  4. canvas中实现画布内元素(下)

    2023-12-07 17:44:05       50 阅读
  5. 基于Vue.js 实现简易指令

    2023-12-07 17:44:05       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-07 17:44:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-07 17:44:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-07 17:44:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-07 17:44:05       20 阅读

热门阅读

  1. fastapi实现websocket在线聊天

    2023-12-07 17:44:05       44 阅读
  2. Redis雪崩

    2023-12-07 17:44:05       42 阅读
  3. 【重点】【双指针】42. 接雨水

    2023-12-07 17:44:05       41 阅读