常用的鼠标事件有onmousedown(鼠标按下)、onmousemove(鼠标拖动)、onmouseup(鼠标弹起)。
拖拽效果原理很简单,我们在鼠标按下时记录当前的鼠标位置,在鼠标拖动时再记录一下鼠标当前位置,然后根据这两个位置计算偏移量,然后改变div元素的left和top的位置,鼠标弹起后取消拖动。
当然了,待拖动div元素要设置为绝对定位。
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DRAG</title>
</head>
<body>
<div id="box" style="position: absolute;background-color:red;width:100px;height:100px;display: inline-block;">
</div>
</body>
</html>
<script>
var box = document.getElementById('box');
var isDrag = false;//是否拖拽
var diffX, diffY;
box.onmousedown = function (e) {
isDrag = true;
//鼠标当前位置
var x = e.clientX;
var y = e.clientY;
//鼠标相对于div的位置
console.log(this.offsetLeft);
diffX = x - this.offsetLeft;
diffY = y - this.offsetTop;
}
box.onmousemove = function (e) {
if (!isDrag) {//不让拖动
return;
}
//鼠标当前位置
var x = e.clientX;
var y = e.clientY;
box.style.left = x - diffX + 'px';
box.style.top = y - diffY + 'px';
}
box.onmouseup = function () {
isDrag = false;
}
</script>