2013-09-27 51 views
1

我正在构建一个HTML5游戏,我刚开始在我的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) -> 

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

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

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

+0

您是否本地移植到iOS或仅在浏览器中运行? – Grant

+0

@Grant只需在iPad上的Safari浏览器中运行即可。是否有更合适的标签可供使用? –

回答

0

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

添加一个虚拟onclick处理程序,onclick = "void(0)",让Safari浏览器在iOS承认span元素作为一个可点击的元素,如清单6-2。

我不知道为什么这个“touchmove”处理程序会影响这一切,但按照这个建议解决了我的问题。这就是说,每次我点击它之前,它仍然会有大约0.5-1.0秒的延迟,这会让我非常恼火。我还没有弄清楚是什么原因造成的。