有没有办法防止橡皮筋但仍允许“点击”事件?

时间:2013-09-27 05:16:33

标签: javascript ios coffeescript webpage hammer.js

我正在构建一个html 5游戏,我刚开始在我的iPad上测试它(iOS 6,我相信,绝对不是iOS 7)。当我在玩游戏时,我想避免橡皮筋,但我也想对滑动事件作出反应。这是我如何做到这一点:

$("#game").on("touchmove", false) #prevent rubber banding on iOS
hammer = $('#game').hammer({swipe_velocity: .05})
hammer.on "swipeup", (event) -> root.core.handleKeyDown(root.constants.UP); stopProp(event)
hammer.on "swipedown", (event) -> root.core.handleKeyDown(root.constants.DOWN); stopProp(event)
hammer.on "swipeleft", (event) -> root.core.handleKeyDown(root.constants.LEFT); stopProp(event)
hammer.on "swiperight", (event) -> root.core.handleKeyDown(root.constants.RIGHT); stopProp(event)

问题是,我希望人们能够点击#game并让它暂停。我的代码的第一行似乎妨碍了这一点,我想了解原因。我的游戏事件监听器正在监听这样的“点击”事件:

$("#game").on "click", (event) ->

奇怪的是,如果我“努力尝试”,它“有时”有效。我不知道为什么会这样。但如果我多次按下它最终会起作用。

另一个奇怪的事情是,如果我注释掉第一行,点击暂停游戏,但似乎总是有半秒延迟。而且我认为这不是出于性能原因,因为滑动非常敏感。

有人可以解释如何避免橡皮筋允许处理点击事件吗?还解释我正在犯的错误?我不明白“点击”和“点击”和“mousedown”和“触摸”如何一起工作。

1 个答案:

答案 0 :(得分:0)

答案在这个官方教程中:https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW6

  

添加一个虚拟的onclick处理程序onclick = "void(0)",以便iOS上的Safari将span元素识别为可单击的元素,如清单6-2所示。

我不确定为什么这个“touchmove”处理程序会对此产生影响,但遵循此建议解决了我的问题。

也就是说,每次点击之前仍然会有大约0.5-1.0秒的延迟,然而它才会让我感到烦恼。我还没弄清楚是什么导致的。