讲师中心 微信公众号
AI工具推荐 视频效率加速

JavaScript拖放API_自定义拖拽行为与数据传递

星婷大大_8520

星婷大大_8520

发布时间:2025-11-19 16:30:07

|

533人浏览过

|

来源于php中文网

原创

启用元素拖拽需设置draggable="true",通过监听dragstart、dragover、drop事件并使用dataTransfer传递数据,可实现拖放功能,其中dragover必须阻止默认行为才能触发drop。

javascript拖放api_自定义拖拽行为与数据传递

JavaScript 拖放 API 允许开发者实现元素的拖拽功能,比如把一个任务从“待办”列表拖到“已完成”列表。通过自定义拖拽行为和数据传递,可以灵活控制拖放过程中的每一个阶段。

启用元素可拖拽

默认情况下,大多数 HTML 元素是不可拖动的。要让一个元素可拖动,需要设置其 draggable 属性为 true。

例如:

<div draggable="true">拖我试试</div>

图片和链接默认可拖动,其他元素如 div、span 等需手动开启 draggable 属性。

立即学习“Java免费学习笔记(深入)”;

监听拖放事件

拖放过程涉及多个关键事件,合理监听这些事件才能实现完整逻辑。

  • dragstart:用户开始拖动元素时触发。适合在此设置拖拽数据和视觉反馈。
  • dragover:拖动过程中持续在目标区域上移动时触发。必须阻止默认行为才能允许放置。
  • drop:在目标区域释放被拖动元素时触发。通常在这里处理数据接收和 DOM 更新。
  • dragend:拖动结束(无论是否成功放置)时触发。可用于清理样式或状态。

示例代码:

HTML Extract
HTML Extract

使用 MinerU 从 HTML 页面和文件中提取内容,将 HTML 转换为保持标题、列表、表格及文本层次结构的干净、结构化 Markdown。F...

下载

element.addEventListener('dragstart', e => {
  e.dataTransfer.setData('text/plain', '拖拽的数据');
  e.target.classList.add('dragging');
});

target.addEventListener('dragover', e => {
  e.preventDefault(); // 必须阻止默认,否则无法触发 drop
});

target.addEventListener('drop', e => {
  e.preventDefault();
  const data = e.dataTransfer.getData('text/plain');
  console.log('接收到的数据:', data);
});

使用 dataTransfer 传递数据

dataTransfer 是拖放事件的核心对象,用于在拖动源和放置目标之间传递数据。

它支持多种数据格式,最常用的是 text/plain,也可以用自定义类型。

  • setData(format, data):在 dragstart 中设置数据。
  • getData(format):在 drop 事件中读取数据。
  • clearData():清除已设置的数据。

建议使用结构化字符串(如 JSON)传递复杂信息:

e.dataTransfer.setData('text/plain', JSON.stringify({id: 1, type: 'task'}));

自定义拖拽视觉效果

可以通过 CSS 或 JavaScript 控制拖拽过程中的外观。

  • 在 dragstart 中添加类名,比如 .dragging,配合 CSS 实现半透明效果。
  • 使用 setDragImage() 自定义拖动时显示的图像:

const img = new Image();
img.src = 'custom-handle.png';
e.dataTransfer.setDragImage(img, 10, 10);

这个方法能提升用户体验,比如只显示一个小图标作为拖动手柄。

基本上就这些。掌握 dragstart、dragover、drop 三个核心事件,配合 dataTransfer 数据传递,就能实现大多数拖放需求。关键是记得阻止 dragover 的默认行为,不然 drop 不会触发。不复杂但容易忽略。

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

1975

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2682

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

916

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2999

2025.09.10

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1589

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1191

2024.06.27

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1558

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2244

2023.09.04

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

60

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 5.6万人学习

CSS教程
CSS教程

共754课时 | 94.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn