# DND - 拖拽放置元素
# 1. 介绍
drag and drop,借助 HTML5 DND API 实现拖拽放置元素
# 2. HTML5 DND API
# 2.1. 事件
拖拽元素 (被拖拽的元素,可移动的元素):
- dragstart
- drag
- dragend
拖拽容器 (放置拖拽元素的元素):
- dragenter
- dragover
- dragleave
- drop
# 2.2. 设置拖拽元素
<div draggable="true">拖拽元素</div>
# 2.3. 设置拖拽容器
浏览器关于 dragenter、dragover 事件的默认行为是 不可放置元素, 也就是说,取消掉浏览器的默认行为就可以让指定元素成为拖拽容器。
<div id="box">拖拽容器</div>
<script>
const box = document.querySelector('#box');
box.addEventListener('dragenter', (event) => {
event.preventDefault();
});
box.addEventListener('dragover', (event) => {
event.preventDefault();
});
</script>
# 2.4. 拖拽数据
<div id="item" draggable="true">拖拽元素</div>
<div id="box">拖拽容器</div>
<script>
var item = document.querySelector('#item');
var box = document.querySelector('#box');
</script>
设置:
item.addEventListener('dragstart', (event) => {
event.dataTransfer.setData('id', JSON.stringify({ name: 'zhangsan' }));
});
读取:
// 只有 drop 侦听器中可以读到数据
box.addEventListener('drop', (event) => {
const data = event.dataTransfer.getData('id');
console.log(data);
});
判断是否有数据:
// 所有 DragEvent 都可以判断是否有数据
box.addEventListener('dragenter', (event) => {
const isExist = event.dataTransfer.types.contains('id');
console.log(isExist);
});
# 3. 参考
上一篇: 下一篇:
本章目录