1.touchstart、touchmove、touchend可以实现拖动元素
2.但是拖动元素需要当前手指的坐标值,我们可以使用targetTouches[0]里的pageX和pageY
3.移动端拖动的原理:手指移动中,计算出手指移动的距离。然后用盒子原来的位置 + 手指移动距离
4.手指移动距离:手指滑动中的位置 - 手指刚开始触摸的位置
拖动元素三步曲:
(1)触摸元素touchstart:获取手指初始坐标,同时获得盒子原来的位置
(2)移动手指touchmove:计算手指的滑动距离,平且移动盒子
(3)离开手指touchend:
注意:手指移动也会触发滚动屏幕,所以这里要阻止默认的屏幕滚动e.preventDefault();
<!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>移动端拖动元素</title><style>*{margin: 0;padding: 0;}body{height: 1000px;}div{width: 100px;height: 100px;background-color: pink;position: relative;}</style></head><body><div></div><script>var div = document.querySelector('div');var startX = 0;//手指初始坐标var startY = 0;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;//移动盒子,盒子原来的位置 + 手指移动距离this.style.left = x + moveX + 'px';this.style.top = y + moveY + 'px';//阻止默认的屏幕滚动e.preventDefault();e.preventDefault();});</script></body></html>
.
