当前位置:首页 > JavaScript

js实现方块拖曳

2026-02-02 15:46:00JavaScript

实现方块拖曳的基本步骤

通过监听鼠标事件(mousedownmousemovemouseup)实现拖曳功能。以下是核心代码示例:

const box = document.getElementById('draggable-box');
let isDragging = false;
let offsetX, offsetY;

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

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

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

CSS 基础样式

确保方块使用绝对定位以便移动:

js实现方块拖曳

#draggable-box {
  position: absolute;
  width: 100px;
  height: 100px;
  background-color: #3498db;
  cursor: grab;
  user-select: none; /* 防止拖动时选中文本 */
}

边界限制

防止方块被拖出视口:

js实现方块拖曳

document.addEventListener('mousemove', (e) => {
  if (!isDragging) return;
  const x = e.clientX - offsetX;
  const y = e.clientY - offsetY;
  const maxX = window.innerWidth - box.offsetWidth;
  const maxY = window.innerHeight - box.offsetHeight;

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

触摸屏支持

添加触摸事件以实现移动端兼容:

box.addEventListener('touchstart', (e) => {
  isDragging = true;
  const touch = e.touches[0];
  offsetX = touch.clientX - box.getBoundingClientRect().left;
  offsetY = touch.clientY - box.getBoundingClientRect().top;
});

document.addEventListener('touchmove', (e) => {
  if (!isDragging) return;
  const touch = e.touches[0];
  box.style.left = `${touch.clientX - offsetX}px`;
  box.style.top = `${touch.clientY - offsetY}px`;
});

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

性能优化

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

box.style.transform = `translate(${x}px, ${y}px)`;

完整示例

查看 CodePen 完整示例(需替换为实际链接)

标签: 方块js
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个…

js实现报表

js实现报表

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

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现吸色

js实现吸色

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