当前位置:首页 > JavaScript

js实现div拖动

2026-03-01 01:25:54JavaScript

实现div拖动的基本思路

通过监听鼠标事件(mousedown、mousemove、mouseup)来实现拖动效果。核心逻辑是记录初始位置偏移量,并在移动时更新元素位置。

基础实现代码

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

let isDragging = false;
let offsetX, offsetY;

draggableDiv.addEventListener('mousedown', (e) => {
  isDragging = true;
  offsetX = e.clientX - draggableDiv.getBoundingClientRect().left;
  offsetY = e.clientY - draggableDiv.getBoundingClientRect().top;
  draggableDiv.style.cursor = 'grabbing';
});

document.addEventListener('mousemove', (e) => {
  if (!isDragging) return;

  draggableDiv.style.left = `${e.clientX - offsetX}px`;
  draggableDiv.style.top = `${e.clientY - offsetY}px`;
});

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

CSS准备

确保div有position属性且初始位置设置:

js实现div拖动

#draggable {
  position: absolute;
  width: 100px;
  height: 100px;
  background-color: #3498db;
  cursor: grab;
  user-select: none;
}

边界限制实现

防止元素被拖出视窗:

js实现div拖动

document.addEventListener('mousemove', (e) => {
  if (!isDragging) return;

  const x = e.clientX - offsetX;
  const y = e.clientY - offsetY;
  const maxX = window.innerWidth - draggableDiv.offsetWidth;
  const maxY = window.innerHeight - draggableDiv.offsetHeight;

  draggableDiv.style.left = `${Math.min(Math.max(0, x), maxX)}px`;
  draggableDiv.style.top = `${Math.min(Math.max(0, y), maxY)}px`;
});

性能优化版本

使用transform代替top/left提升性能:

let posX = 0, posY = 0;

document.addEventListener('mousemove', (e) => {
  if (!isDragging) return;

  posX = e.clientX - offsetX;
  posY = e.clientY - offsetY;

  draggableDiv.style.transform = `translate(${posX}px, ${posY}px)`;
});

完整封装函数

可复用的拖动初始化函数:

function makeDraggable(element) {
  let isDragging = false;
  let offsetX, offsetY;

  element.addEventListener('mousedown', (e) => {
    isDragging = true;
    const rect = element.getBoundingClientRect();
    offsetX = e.clientX - rect.left;
    offsetY = e.clientY - rect.top;
    element.style.cursor = 'grabbing';
  });

  document.addEventListener('mousemove', (e) => {
    if (!isDragging) return;

    element.style.left = `${e.clientX - offsetX}px`;
    element.style.top = `${e.clientY - offsetY}px`;
  });

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

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

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现视口

js实现视口

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