拖拽原理问题
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>doc</title> <style> body { height: 500px; background-color: papayawhip; } .to { position: fixed; right: 20px; bottom: 20px; width: 50px; height: 50px; line-height: 50px; text-align: center; border-radius: 50%; background-color: #dadada; color: white; font-size: 30px; -webkit-tap-highlight-color: transparent; } </style> </head> <body> <a id="to" class="to" href="javascript:;">↑</a> <script> var to = document.getElementById('to'); var startPoint = {}; var diffPoint = {}; to.addEventListener('touchstart', function (e) { startPoint.x = e.changedTouches[0].pageX; startPoint.y = e.changedTouches[0].pageY; console.log('start--' + e.changedTouches[0].pageX + ':' + e.changedTouches[0].pageY); }); to.addEventListener('touchmove', function (e) { diffPoint.x = e.changedTouches[0].pageX - startPoint.x; diffPoint.y = e.changedTouches[0].pageY - startPoint.y; to.style.transform = 'translate3d(' + diffPoint.x + 'px,' + diffPoint.y + 'px,0)'; console.log('move--' + e.changedTouches[0].pageX + ':' + e.changedTouches[0].pageY); }); to.addEventListener('touchend', function (e) { startPoint.x = e.changedTouches[0].pageX; startPoint.y = e.changedTouches[0].pageY; console.log('end--' + e.changedTouches[0].pageX + ':' + e.changedTouches[0].pageY); }); </script> </body> </html>
拖拽简单来讲不就是touchstart事件里求得起始坐标,touchmove事件里求得距离=目标坐标-起始坐标,然后移动这些距离,touchend事件里更新下起始坐标不就行了吗?就像上面的代码一样,但是为啥第二次移动时,明明已更新了startPoint(触发touchend事件更新startPoint为移动后当前的坐标),当触发touchmove事件拖拽的元素会回到最初始的位置(左下角)?
视频中curPoint的作用不理解,难道说是startPoint记录的是移动前的坐标,curPoint记录的是移动后的坐标,当触发touchstart事件时startPoint才更新为当前坐标(也就是curPoint)?
40
收起
正在回答
2回答
同学你好,问题解答如下:
1、translate3d方法设置的是移动距离,也就是从起始位置(第一次)移动后的距离。第一次移动是正确的,第二次移动的时候diffPoint对象值是差值,也就是从第一次结束为止开始移动的差值,并没有加上第一次已经移动过的距离,所以还是从起始位置开始移动的。
2、这样理解是可以的。curPoint对象的作用除了记录每一次移动后的位置,当再一次移动的时候,移动差值+curPoint就是translate3d方法需要设置的值。
自己可以再测试理解下。如果我的回答帮到了你,欢迎采纳,祝学习愉快~
3.WebAPP开发与小程序
- 参与学习 人
- 提交作业 622 份
- 解答问题 6815 个
微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星