原生Javascript实现元素随鼠标拖动而移动的效果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<style>
#drag {
position: absolute;
left: 0;
top: 0;
width: 50px;
height: 50px;
background: #0ff;
}
</style>
<div id="drag"></div>
<script>
let el = document.getElementById("drag");
el.onmousedown = function (e) {
e = e || window.event;
// 初始位置
let offleft = e.movementX;
let offTop = e.movementY;
// 鼠标点击位置
let startX = e.clientX;
let startY = e.clientY;
console.log(startX, startY);
el.setCapture && el.setCapture();
document.onmousemove = function (event) {
event = event || window.event;
// 鼠标停止位置
let endX = event.clientX;
let endY = event.clientY;
// 移动距离
let moveX = endX - startX;
let moveY = endY - startY;
// 元素最终位置
let lastX = offleft + moveX;
let lastY = offTop + moveY;
// console.log(moveX, moveY, lastX, lastY);
//边界处理
if (
lastX >
document.documentElement.clientWidth - el.clientWidth - 20
) {
lastX = document.documentElement.clientWidth - el.clientWidth - 20;
} else if (lastX < 20) {
lastX = 0;
}
if (
lastY >
document.documentElement.clientWidth - el.clientWidth - 20
) {
lastY =
document.documentElement.clientHeight - el.clientHeight - 20;
} else if (lastY < 20) {
lastY = 0;
}
el.style.left = lastX + "px";
el.style.top = lastY + "px";
};
//
document.onmouseup = function () {
document.ontouchmove = null;
document.releaseCapture && document.releaseCapture();
};
return false;
};
</script>
</body>
</html>