目标效果:
在移动端中,手指移动(touchmove)的时候,div盒子跟着手指一起移动
e.g.div盒子的初始状态
原理:
div盒子移动距离=div盒子初始位置+手指移动距离
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
position: absolute;
left: 0;
/* 盒子要加定位!!! */
width: 100px;
height: 100px;
background-color: pink;
}
</style>
</head>
<body>
<div></div>
<script>
var div = document.querySelector('div');
// 手指初始坐标startX,startY
var startX = 0;
var startY = 0;
// 盒子原来的坐标x,y
var x = 0;
var y = 0;
div.addEventListener('touchstart', function (e) {
// 获取手指初始坐标
startX = e.targetTouches[0].pageX;
startY = e.targetTouches[0].pageY;
// 获取盒子的初始坐标
x = this.offsetLeft;
y = this.offsetTop;
})
div.addEventListener('touchmove', function (e) {
// 手指移动的距离=移动中的手指的坐标-手指的初始坐标
var moveX = e.targetTouches[0].pageX - startX;
var moveY = e.targetTouches[0].pageY - startY;
// 移动盒子
// 盒子最新的坐标=盒子初始坐标+手指移动的距离
// 记得加单位px
this.style.left = x + moveX + 'px';
this.style.top = y + moveY + 'px';
// 由于touchmove默认会触发屏幕滚动
// 加上e.preventDefault();阻止默认行为
// 加上后,手指移动带动盒子移动的时候,屏幕就不会滚动了
e.preventDefault();
})
</script>
</body>
</html>