当前位置:首页 > JavaScript

js实现 拖动

2026-04-03 22:17:18JavaScript

实现拖动的核心步骤

监听鼠标事件 在可拖动元素上添加mousedown事件监听器,记录初始位置和鼠标位置。

element.addEventListener('mousedown', (e) => {
  isDragging = true;
  startX = e.clientX - element.offsetLeft;
  startY = e.clientY - element.offsetTop;
});

处理鼠标移动 在文档上添加mousemove事件,计算元素新位置并更新样式。

document.addEventListener('mousemove', (e) => {
  if (!isDragging) return;
  element.style.left = `${e.clientX - startX}px`;
  element.style.top = `${e.clientY - startY}px`;
});

结束拖动 通过mouseup事件清除拖动状态。

document.addEventListener('mouseup', () => {
  isDragging = false;
});

完整实现示例

const draggableElement = document.getElementById('draggable');
let isDragging = false;
let startX, startY;

draggableElement.addEventListener('mousedown', (e) => {
  isDragging = true;
  startX = e.clientX - draggableElement.offsetLeft;
  startY = e.clientY - draggableElement.offsetTop;
  draggableElement.style.cursor = 'grabbing';
});

document.addEventListener('mousemove', (e) => {
  if (!isDragging) return;
  draggableElement.style.left = `${e.clientX - startX}px`;
  draggableElement.style.top = `${e.clientY - startY}px`;
});

document.addEventListener('mouseup', () => {
  isDragging = false;
  draggableElement.style.cursor = 'grab';
});

注意事项

CSS准备 确保元素具有position: absoluteposition: fixed样式,并设置初始定位。

#draggable {
  position: absolute;
  cursor: grab;
  user-select: none;
}

性能优化 对于频繁触发的mousemove事件,可以考虑使用防抖或节流技术。

触摸屏支持 需要额外添加touchstarttouchmovetouchend事件处理程序以实现移动端兼容。

js实现 拖动

边界限制 可以通过添加位置判断逻辑来限制元素移动范围,防止拖出可视区域。

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

相关文章

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

vue实现js休眠

vue实现js休眠

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

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…