新闻中心
HTML拖放API怎么实现_HTML5拖放DragDrop功能指南
启用元素拖动需设置draggable="true",通过dragstart、dragover、drop事件实现拖放逻辑,利用dataTransfer传递数据并调用preventDefault()防止默认行为。

HTML5 的拖放(Drag and Drop)API 让用户可以通过鼠标拖动元素从一个位置移动到另一个位置,广泛用于文件上传、列表排序、拼图游戏等场景。实现这一功能不需要额外的库,原生 J*aScript 就能完成。
启用元素可拖动
要让一个元素可以被拖动,需设置其 draggable="true" 属性,尤其是图片、链接默认可拖动,其他元素如 div、span 需手动开启。
示例:<div id="dragElement" draggable="true" style="padding: 20px; background: #eee;">拖动我</div>
监听拖放事件
拖放过程涉及多个事件,关键包括:
- dragstart:拖动开始时触发,用于设置拖动数据
- dragover:被拖动元素在目标区域上移动时持续触发,必须阻止默认行为才能允许放置
- drop:在目标区域释放时触发,处理放置逻辑
- dragend:拖动结束(无论是否成功)
基本事件绑定示例:
青泥AI
青泥学术AI写作辅助平台
360
查看详情
const dragEl = document.getElementById('dragElement');
const dropZone = document.getElementById('dropZone');
dragEl.addEventListener('dragstart'
, (e) => {
e.dataTransfer.setData('text/plain', '这是拖动的数据');
});
dropZone.addEventListener('dragover', (e) => {
e.preventDefault(); // 必须阻止默认行为
});
dropZone.addEventListener('drop', (e) => {
e.preventDefault();
const data = e.dataTransfer.getData('text/plain');
dropZone.textContent = data;
});
实现拖放文本或自定义数据
dataTransfer 对象是拖放的核心,用于在拖动过程中传递数据。
-
setData(format, data):设置拖动数据,常用格式为
text/plain - getData(format):在 drop 时获取数据
- effectAllowed 和 dropEffect 可控制光标样式和操作类型(如 move、copy)
例如,拖动时显示复制图标:
dragEl.addEventListener('dragstart', (e) => {
e.dataTransfer.setData('text/plain', dragEl.id);
e.dataTransfer.effectAllowed = 'copy';
});
dropZone.addEventListener('dragover', (e) => {
e.preventDefault();
e.dataTransfer.dropEffect = 'copy'; // 显示复制光标
});
拖放文件(如上传)
拖放 API 还支持文件操作。将文件从桌面拖入浏览器时,在 drop 事件中可通过 e.dataTransfer.files 获取 FileList。
dropZone.addEventListener('dragover', (e) => e.preventDefault());
dropZone.addEventListener('drop', (e) => {
e.preventDefault();
const files = e.dataTransfer.files;
if (files.length > 0) {
const file = files[0];
console.log('文件名:', file.name);
// 可结合 FileReader 读取内容或用 FormData 上传
}
});
基本上就这些。掌握 dragstart、dragover、drop 三个关键事件,再合理使用 dataTransfer,就能实现大多数拖放需求。注意始终调用 preventDefault() 避免浏览器默认行为中断操作。
以上就是HTML拖放API怎么实现_HTML5拖放DragDrop功能指南的详细内容,更多请关注其它相关文章!
# 鼠标
# 南昌推广网站
# 武汉市网站优化作用
# 常州微信网站建设要点
# 网站优化平台公司
# 本田中控优化网站
# 浙江关键词排名优化排名
# 自建网站建设视频
# 昌都台州网站建设
# 九江湖南网站优化推广
# 石首网站推广公司
# 不需要
# 多个
# 尤其是
# html语言
# 这一
# 上传
# 这是
# 就能
# 拖放
# 拖动
# ai
# 浏览器
# html5
# go
# html
# java
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】
聚水潭ERP登录页面入口 聚水潭ERP官网登录界面
MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略
qq邮箱日历功能怎么用_创建日程与会议邀请的技巧
如何将HTML表格多行数据保存到Google Sheet
三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升
word中如何让数字纵向排列_Word数字纵向排列方法
Angular中父组件异步更新子组件复选框状态的实践指南
Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略
Linux如何排查内存不足OOME问题_LinuxOOM分析教程
谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航
win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】
excel怎么制作工资条 excel快速生成工资条的方法
夸克浏览器图书入口 夸克手机浏览器阅读入口
UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】
理解J*aScript Promise的微任务队列与执行顺序
PHP中SSG-WSG API的AES加密实践:正确使用初始化向量
中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】
正确连接J*aScript到HTML实现可点击图片与自定义事件处理
今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程
《主播少女的秘密账号迷宫》首支宣传片
海量存储:机器视觉智能化的核心基石
Win10双系统截图高效法 截屏快捷键速记【技巧】
cad如何更改注释性对象的比例_cad注释性比例调整方法
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台
Django表单验证失败时保留用户输入数据的最佳实践
css绝对定位元素脱离父容器怎么办_确保父元素position非static
Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区
理解Python模块与全局变量的作用域管理
抓大鹅无需下载版 抓大鹅秒玩版入口
格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施
Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】
Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式
Golang如何实现Web文件静态资源服务器_Golang静态资源服务器开发与实践
PHP URL参数传递与500错误调试指南
TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程
如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension
composer的"require-dev"部分是用来做什么的?
c++如何实现一个简单的ECS框架_c++数据驱动设计与游戏开发
网易大神怎么保存别人动态的图片_网易大神动态图片保存方法
QQ邮箱网页版入口登录 QQ邮箱在线邮箱官方通道
Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程
CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题
腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法
PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧
ArrayList与LinkedList操作复杂度详解:遍历与修改
ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版
圆通快递查询实时追踪 圆通物流包裹状态快速查看
sublime怎么覆盖插件的默认快捷键_sublime快捷键优先级与设置


2025-10-08
浏览次数:次
返回列表
, (e) => {
e.dataTransfer.setData('text/plain', '这是拖动的数据');
});
dropZone.addEventListener('dragover', (e) => {
e.preventDefault(); // 必须阻止默认行为
});
dropZone.addEventListener('drop', (e) => {
e.preventDefault();
const data = e.dataTransfer.getData('text/plain');
dropZone.textContent = data;
});