2013-09-27 80 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秒的延遲,這會讓我非常惱火。我還沒有弄清楚是什麼原因造成的。