Draggable 属性及拖拽案例
本文介绍的是HTML5中关于draggable的一些属性以及相关的使用方法。
·
拖拽交互:Draggable 属性及拖拽案例
本文介绍的是HTML5中关于draggable的一些属性以及相关的使用方法。
拖拽的生命周期
要掌握原生拖拽,首先要理解它涉及的两个主角和七个关键事件:
被拖拽元素 (Source)
这是你鼠标按住并移动的对象。
dragstart: 拖拽开始时触发(最关键,用于传递数据)。drag: 拖拽过程中持续触发(类似mousemove)。dragend: 拖拽结束时触发(无论成功与否)。- 示例:开始拖拽一个元素
<div class="draggable" draggable="true">可拖拽元素</div>
<div class="dropzone">Drop Zone 1</div>
<div class="dropzone">Drop Zone 2</div>
let dragged = null;
document.addEventListener('dragstart', (e) => {
if (e.target?.nodeType === 1 && e.target.draggable) {
dragged = e.target;
console.log('触发dragstart');
}
});
document.addEventListener('drag', (e) => {
if (e.target?.nodeType === 1 && e.target.draggable) {
dragged = e.target;
console.log('触发drag');
}
});
document.addEventListener('dragend', () => {
dragged = null;
console.log('触发dragend');
});

放置目标 (Target)
这是你准备把元素扔进去的容器。
dragenter: 被拖拽元素进入容器范围时触发。dragover: 被拖拽元素在容器上方悬停时持续触发(必须在此阻止默认行为)。dragleave: 被拖拽元素离开容器范围时触发。drop: 鼠标松开,元素被放置在容器中时触发。

示例:实现一个拖拽元素

拖拽要注意的事项:
1.添加 e.preventDefault() 阻止默认行为,
浏览器默认将拖拽行为视为「数据传输的安全操作」,比如:
- 禁止普通元素被 “放下”(防止误操作);
- 拖拽链接 / 图片时,默认会打开链接 / 预览图片;
- 拖拽进入 / 在元素上移动时,浏览器会给元素加 “禁止放下” 的鼠标样式
通过e.preventDefault() 覆盖浏览器默认规则。
需要在dragover,drog事件中全局触发e.preventDefault(),因为浏览器会在拖拽过程中持续检查是否允许放下避免元素失效。比如在拖拽的是链接 / 图片,放下后会默认打开链接 / 在新标签页预览图片,会造成放置失效。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)