当前位置:首页 > JavaScript

js实现方块拖曳

2026-03-15 16:00:53JavaScript

实现方块拖曳的步骤

HTML 结构 创建一个简单的方块元素,并为其添加 draggable 属性:

js实现方块拖曳

<div id="draggable-box" draggable="true">拖曳我</div>

CSS 样式 为方块添加基本样式,使其可见且可交互:

js实现方块拖曳

#draggable-box {
  width: 100px;
  height: 100px;
  background-color: #3498db;
  color: white;
  text-align: center;
  line-height: 100px;
  cursor: move;
}

JavaScript 逻辑 通过事件监听实现拖曳功能:

const box = document.getElementById('draggable-box');

box.addEventListener('dragstart', (e) => {
  e.dataTransfer.setData('text/plain', box.id);
  box.style.opacity = '0.5';
});

box.addEventListener('dragend', () => {
  box.style.opacity = '1';
});

document.addEventListener('dragover', (e) => {
  e.preventDefault(); // 允许放置
});

document.addEventListener('drop', (e) => {
  e.preventDefault();
  const draggedId = e.dataTransfer.getData('text/plain');
  const draggedElement = document.getElementById(draggedId);

  // 更新方块位置
  draggedElement.style.position = 'absolute';
  draggedElement.style.left = `${e.clientX - draggedElement.offsetWidth / 2}px`;
  draggedElement.style.top = `${e.clientY - draggedElement.offsetHeight / 2}px`;
});

注意事项

  • dragover 事件必须调用 preventDefault() 才能触发 drop 事件。
  • 拖曳过程中可以调整元素的透明度或样式以提升用户体验。
  • 若需限制拖曳范围,可在 drop 事件中检查坐标并调整位置。

兼容性优化

对于旧版本浏览器,可添加 touch 事件支持:

box.addEventListener('touchstart', handleTouchStart);
box.addEventListener('touchmove', handleTouchMove);

let initialX, initialY;

function handleTouchStart(e) {
  initialX = e.touches[0].clientX - box.offsetLeft;
  initialY = e.touches[0].clientY - box.offsetTop;
}

function handleTouchMove(e) {
  e.preventDefault();
  box.style.position = 'absolute';
  box.style.left = `${e.touches[0].clientX - initialX}px`;
  box.style.top = `${e.touches[0].clientY - initialY}px`;
}

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

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现报表

js实现报表

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

js实现vr

js实现vr

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

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…