当前位置:首页 > JavaScript

js 实现拖拽

2026-02-02 11:14:29JavaScript

实现拖拽功能

在JavaScript中实现拖拽功能可以通过HTML5的拖拽API或自定义事件监听来实现。以下是两种常见的方法:

使用HTML5拖拽API

HTML5提供了原生的拖拽支持,通过draggable属性和相关事件实现。

<div id="dragElement" draggable="true">拖拽我</div>
const dragElement = document.getElementById('dragElement');

dragElement.addEventListener('dragstart', (e) => {
    e.dataTransfer.setData('text/plain', e.target.id);
});

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

document.addEventListener('drop', (e) => {
    e.preventDefault();
    const data = e.dataTransfer.getData('text/plain');
    const element = document.getElementById(data);
    e.target.appendChild(element);
});

自定义拖拽实现

通过监听鼠标事件(mousedownmousemovemouseup)实现拖拽效果。

<div id="dragElement" style="position: absolute;">拖拽我</div>
const dragElement = document.getElementById('dragElement');
let isDragging = false;
let offsetX, offsetY;

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

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

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

注意事项

  • 使用HTML5拖拽API时,确保目标元素的dragover事件调用preventDefault()以允许放置。
  • 自定义拖拽实现时,元素的position需设置为absoluterelative以便通过lefttop调整位置。
  • 拖拽过程中更新光标样式(如grabgrabbing)可提升用户体验。

js  实现拖拽

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

相关文章

vue实现拖拽计算器

vue实现拖拽计算器

Vue实现拖拽计算器的步骤 创建Vue项目 使用Vue CLI创建一个新项目,确保已安装Vue和必要的依赖项。通过命令行初始化项目并安装依赖。 vue create drag-calculator…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Paren…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="sli…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…