先创建一个元素
.container {
height: 100px;
width: 100px;
background-color: rgba(102, 102, 102, .5);
position: absolute;
top: 0px;
left: 0px;
}
<div class="container" data-move="true"></div>
移动元素的方法
let client_position = null;
let origin = null;
let move_ele = null
const mousedown = (e) => {
if (!e.target.getAttribute('data-move')) return
client_position = e.target.getBoundingClientRect()
move_ele = e.target
console.log('开始拖拽')
window.addEventListener('mousemove', mousemove)
origin = {x: e.screenX, y: e.screenY}
}
const mousemove = (e) => {
const position = {x: e.screenX, y: e.screenY}
const x = position.x - origin.x
const y = position.y - origin.y
move_ele.style.top = `${client_position.top + y}px`
move_ele.style.left = `${client_position.left + x}px`
}
const mouseup = (e) => {
window.removeEventListener('mousemove', mousemove)
console.log('结束拖拽')
}
window.addEventListener('mousedown', mousedown)
window.addEventListener('mouseup', mouseup)
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style type="text/css">
.container {
height: 100px;
width: 100px;
background-color: rgba(102, 102, 102, .5);
position: absolute;
top: 0px;
left: 0px;
}
</style>
</head>
<body>
<div class="container" data-move="true"></div> //自定义属性data-move表示当前元素是可拖拽移动元素
<script>
let client_position = null;
let origin = null;
let move_ele = null
const mousedown = (e) => {
if (!e.target.getAttribute('data-move')) return
client_position = e.target.getBoundingClientRect()
move_ele = e.target
console.log('开始拖拽')
window.addEventListener('mousemove', mousemove)
origin = {x: e.screenX, y: e.screenY}
}
const mousemove = (e) => {
const position = {x: e.screenX, y: e.screenY}
const x = position.x - origin.x
const y = position.y - origin.y
move_ele.style.top = `${client_position.top + y}px`
move_ele.style.left = `${client_position.left + x}px`
}
const mouseup = (e) => {
window.removeEventListener('mousemove', mousemove)
console.log('结束拖拽')
}
window.addEventListener('mousedown', mousedown)
window.addEventListener('mouseup', mouseup)
</script>
</body>
</html>