Appearance
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#container {
position: relative;
width: 300px;
height: 200px;
border: 3px solid black;
margin: 0 auto;
}
#box1 {
width: 100px;
height: 100px;
background-color: pink;
position: absolute;
cursor: move;
}
</style>
</head>
<body>
<div id="container"></div>
<div id="box1" draggable="true"></div>
<script>
/*
H5的drag事件: 可以把一个元素从当前位置拖拽到指定容器中
dragstart 开始拖拽触发
dragend 拖拽结束触发
dragover 元素在容器内拖拽时触发(鼠标不动也会一直触发)
dragenter 元素进入容器时触发
dragleave 元素离开容器时触发
drop 结束拖拽时如果元素在容器中则触发
给要拖拽的元素设置可被拖拽属性
draggable="true"
*/
box1.ondragstart = function (event) {
// event -> DragEvent: 拖拽事件对象
// 拖拽事件对象上有个属性 event.dataTransfer -> DataTransfer实例, 有三个方法
// setData(类型标识, 值) 类型标识: text/plain text/html text/url-list... 值: 最后都会变为字符串
// getData(类型标识) 只能在drop中得到
// clearData(类型标识)
event.dataTransfer.setData('text/plain', this.id)
}
container.ondragover = function (event) {
event.preventDefault()
}
container.ondrop = function (event) {
event.preventDefault()
let id = event.dataTransfer.getData('text/plain')
let ele = document.getElementById(id)
container.appendChild(ele)
ele.style.top = 0
ele.style.left = 0
ele.setAttribute('draggable', false)
}
</script>
</body>
</html>