当前位置:首页 > JavaScript

js 实现 拖动

2026-04-06 00:44:23JavaScript

实现拖动的步骤

监听鼠标事件

在JavaScript中实现拖动功能需要监听三个鼠标事件:mousedownmousemovemouseup。当用户在元素上按下鼠标时触发mousedown,移动鼠标时触发mousemove,释放鼠标时触发mouseup

const draggableElement = document.getElementById('draggable');

draggableElement.addEventListener('mousedown', startDrag);

计算初始位置

mousedown事件中,记录鼠标按下时的初始位置和元素当前的偏移量。这有助于在拖动过程中计算元素的新位置。

js 实现 拖动

let offsetX, offsetY;

function startDrag(e) {
  offsetX = e.clientX - draggableElement.getBoundingClientRect().left;
  offsetY = e.clientY - draggableElement.getBoundingClientRect().top;

  document.addEventListener('mousemove', drag);
  document.addEventListener('mouseup', stopDrag);
}

更新元素位置

mousemove事件中,根据鼠标的当前位置计算元素的新位置,并更新元素的样式属性(如lefttop)以实现拖动效果。

js 实现 拖动

function drag(e) {
  draggableElement.style.left = (e.clientX - offsetX) + 'px';
  draggableElement.style.top = (e.clientY - offsetY) + 'px';
}

停止拖动

mouseup事件中,移除mousemovemouseup事件监听器,停止拖动。

function stopDrag() {
  document.removeEventListener('mousemove', drag);
  document.removeEventListener('mouseup', stopDrag);
}

完整示例代码

以下是一个完整的实现示例,包含HTML和CSS部分:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Draggable Element</title>
  <style>
    #draggable {
      width: 100px;
      height: 100px;
      background-color: #3498db;
      position: absolute;
      cursor: move;
    }
  </style>
</head>
<body>
  <div id="draggable"></div>

  <script>
    const draggableElement = document.getElementById('draggable');
    let offsetX, offsetY;

    function startDrag(e) {
      offsetX = e.clientX - draggableElement.getBoundingClientRect().left;
      offsetY = e.clientY - draggableElement.getBoundingClientRect().top;

      document.addEventListener('mousemove', drag);
      document.addEventListener('mouseup', stopDrag);
    }

    function drag(e) {
      draggableElement.style.left = (e.clientX - offsetX) + 'px';
      draggableElement.style.top = (e.clientY - offsetY) + 'px';
    }

    function stopDrag() {
      document.removeEventListener('mousemove', drag);
      document.removeEventListener('mouseup', stopDrag);
    }

    draggableElement.addEventListener('mousedown', startDrag);
  </script>
</body>
</html>

注意事项

  • 确保元素的position属性设置为absoluterelative,否则lefttop样式不会生效。
  • 拖动过程中可能会触发文本选中或其他浏览器默认行为,可以通过e.preventDefault()阻止默认行为。
  • 如果需要支持触摸设备,可以添加touchstarttouchmovetouchend事件监听器。

通过以上步骤,可以实现一个基本的拖动功能。根据需求,可以进一步扩展功能,如限制拖动范围或添加动画效果。

标签: 拖动js
分享给朋友:

相关文章

vue实现数据拖动

vue实现数据拖动

Vue 实现数据拖动 在 Vue 中实现数据拖动通常涉及 HTML5 的拖放 API 或第三方库(如 vuedraggable)。以下是两种常见方法: 使用 HTML5 拖放 API 设置拖拽元素…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…