当前位置:首页 > JavaScript

js 实现 拖动

2026-04-06 00:44:23JavaScript

实现拖动的步骤

监听鼠标事件

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

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

draggableElement.addEventListener('mousedown', startDrag);

计算初始位置

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

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)以实现拖动效果。

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部分:

js 实现 拖动

<!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 实现拖动的几种方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,通过 draggable 属性和相关事件实现拖动功能。 <template> &…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…