【发布时间】:2017-02-23 14:41:25
【问题描述】:
编辑
我实际上是在尝试创建马里奥风格的跳跃,所以当你在身体上触摸/鼠标按下时,我有一个开始向上移动的对象,但是当你放手时,这种加速停止。这意味着我无法使用 FastClick,因为我正在寻找 touchstart、touchend 事件,而不是单个 click 事件。
~
我正在尝试在浏览器中响应移动设备上的touchstart 事件。目前我正在使用这两个监听器:
document.body.addEventListener('touchstart', function(e) {
e.preventDefault();
space_on();
return false;
}, false);
document.body.addEventListener('touchend', function(e) {
e.preventDefault();
space_off();
return false;
}, false);
我本质上是在尝试模仿一些我工作得非常好的东西,我使用 keydown 和 keyup 事件分别使盒子跳跃和下降。
我遇到的问题是,如果您不滑动,触摸启动实际上会延迟一小段时间。要么,要么计算让我失去帧率。
我已经在使用 fastclick,但这并没有影响(可能是因为它从未打算在 touchstart 侦听器上触发)。你可以在这里看到我的意思:
https://www.youtube.com/watch?v=8GgjSFgtmFk
我刷了 3 次,盒子立刻跳了起来,然后我点击了 3 次,你可以看到(尤其是第二次)它有点失去帧率或延迟。这是另一个可能更清晰的示例:https://www.youtube.com/watch?v=BAPw1M2Yfig
这里有一个演示:
http://codepen.io/EightArmsHQ/live/7d851f0e1d3a274b57221dac9aebc16a/
请记住,您需要使用手机或触控设备,或者在 chrome 中模拟触控。
谁能帮我避免在触摸启动时遇到的帧率下降或延迟,但不会变成滑动?
【问题讨论】:
-
在我的手机中工作正常。你能说更多细节吗?喜欢浏览器和操作系统的版本,或者您是否使用 phonegap?
-
来自 fastclick 文档:
FastClick is a simple, easy-to-use library for eliminating the 300ms delay between a physical tap and the firing of a click event on mobile browsers.他们说它消除了点击的延迟,而不是触摸开始/触摸结束,所以也许使用点击会有所帮助。另外我看到你在代码中使用setInterval来更新图形,这真的不推荐,你应该使用requestAnimationFrame。 -
这是开发人员普遍抱怨的问题,因此有大量的库正在努力解决它。如上所述,FastClick 就是其中之一。我相信 angular-material 和 ngTouch 也有针对 angular1 用户的解决方案。
-
@DominicAquilina @AlexanderDerck 感谢您的回复。问题是我不能使用快速点击。如果您在我的代码中看到,触摸事件的开始会打开某些东西,而它的结束会关闭相同的东西。请参阅问题顶部的编辑。因此,如果我使用快速点击,我无法按住以获得所需的 UX。注意到
requestAnimationFrame -
不过,它仍然是一个有效的启动点。值得研究他们的代码,看看他们做了什么。
标签: javascript mobile touch