JS灵感——拖动一个div


在这里插入图片描述

1,代码骨架

一个目标元素:

<div id="app"></div>

给上简单的样式:

宽高,背景色。
绝对定位。
不被选中。

#app {
    
    
	width: 10rem;
	height: 10rem;
	background-color: pink;
	
	position: absolute;
	user-select: none;
}

效果:

在这里插入图片描述

2,两个状态

是否正在拖动:isMoving。
开始拖动时的鼠标相对位置:x,y。

isMoving能控制是移动呢还是不移动。
x,y能让鼠标始终在div的一个固定地方,而不是左上角。

const app = document.getElementById("app")
let moveState = {
    
    
	isMoving: false,
	x: 0,
	y: 0
}

3,三个方法

拖动前,拖动中,拖动后。

function beforeMove(e) {
    
    
	moveState = {
    
    
		isMoving: true,
		x: e.pageX - app.offsetLeft,
		y: e.pageY - app.offsetTop
	}
}
function move(e) {
    
    
	if (moveState.isMoving) {
    
    
		app.style.left = e.pageX - moveState.x + "px"
		app.style.top = e.pageY - moveState.y + "px"
	}
}
function afterMove(e) {
    
    
	if (moveState.isMoving) {
    
    
		moveState.isMoving = false
	}
}

4,四个事件

按下。
移动。
离开。
抬起。

app.addEventListener('mousedown', beforeMove)
app.addEventListener('mousemove', move)
app.addEventListener('mouseleave', move)
app.addEventListener('mouseup', afterMove)

5,最终效果

在这里插入图片描述

6,全部代码

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport"
		  content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<title>Document</title>
	<style>
		#app {
      
      
			width: 10rem;
			height: 10rem;
			position: absolute;
			background-color: pink;
			user-select: none;
		}
	</style>
</head>
<body>
<div id="app"></div>
<script>
	const app = document.getElementById("app")
	let moveState = {
      
      
		isMoving: false,
		x: 0,
		y: 0
	}
	app.addEventListener('mousedown', beforeMove)
	app.addEventListener('mousemove', move)
	app.addEventListener('mouseleave', move)
	app.addEventListener('mouseup', afterMove)

	function beforeMove(e) {
      
      
		moveState = {
      
      
			isMoving: true,
			x: e.pageX - app.offsetLeft,
			y: e.pageY - app.offsetTop
		}
	}
	function move(e) {
      
      
		if (moveState.isMoving) {
      
      
			app.style.left = e.pageX - moveState.x + "px"
			app.style.top = e.pageY - moveState.y + "px"
		}
	}
	function afterMove(e) {
      
      
		if (moveState.isMoving) {
      
      
			moveState.isMoving = false
		}
	}
</script>

</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_37284843/article/details/124575273