<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>拖拽功能
</title>
</head>
<body>
<div></div>
<script>
let divEle = document.getElementsByTagName("div")[0];
divEle.style.width = `200px`;
divEle.style.height = `200px`;
divEle.style.position = `absolute`;
divEle.style.left = `0`;
divEle.style.backgroundColor = `skyblue`;
divEle.addEventListener("mousedown", function (e) {
let event1 = e || window.event;
let yidong = function (e) {
let event = e || window.event;
divEle.style.left = event.clientX-event1.offsetX + `px`;
divEle.style.top = event.clientY-event1.offsetY + `px`;
}
this.style.border = `2px solid red`;
document.addEventListener("mousemove", yidong);
divEle.addEventListener("mouseup", function (e) {
document.removeEventListener("mousemove", yidong);
this.style.border = `none`;
})
})
</script>
</body>
</html>
问2:因为如果需要让鼠标固定在:鼠标按下去的时候鼠标在div内的位置 那么就需要获得鼠标按下去时,鼠标距离div顶部、左侧的距离,所以需要用event1
问1:为什么移动函数写在事件内 因为如果需要用到事件内声明的变量(event1) 如果将函数写在外面的话,没有办法拿到事件内声明的值。并且只有鼠标按下的时候才能移动div的位置,所以移动事件也需要写在事件内,并且鼠标松开时要删除它。