2012-11-04 170 views
3

鬼點擊上有很多材料/帖子,我試圖更好地理解它。因此,按照我的理解,鬼點擊的原因是click事件在touch事件後約300毫秒內發送。 jQuery Mobile suggests每當有機會改變手指位置下方的內容時不使用他們的vclick事件。移動應用程序中的Ghostclicks

我的第一個問題是:這是否意味着鬼點擊纔會觸發如果click目標元素是從一個不同的最初感動?所以,比方說,我在觸摸按鈕時寫入數據庫條目 - 沒有別的。有沒有點擊鬼的機會?

如果是這樣的話,那不是意味着我可以防止鬼點擊乾脆,如果我只是使用只有tap事件並沒有任何click事件?

我的最後一個問題是,如果我可以簡單地告訴瀏覽器在使用PhoneGap時不使用300ms的延遲(可以立即解決問題),但我只是猜測我不能這樣做,因爲它可能硬編碼到瀏覽器中。

回答

3

點擊事件延遲了300毫秒,以檢測雙擊或胖手指錯誤。

是的,只要有可能,您應該使用觸摸事件。

是的,有很多方法通過做一點JS來實現快速點擊。例如:

  1. https://developers.google.com/mobile/articles/fast_buttons
  2. https://forum.jquery.com/topic/how-to-remove-the-300ms-delay-when-clicking-on-a-link-in-jquery-mobile
  3. http://labs.ft.com/2011/08/fastclick-native-like-tapping-for-touch-apps/

你不必忍受在300ms的延遲。

+0

對不起,我應該提到我知道這些解決方案。但是,我之前嘗試過,沒有一個可靠地工作(在頁面之間導航時)。那麼你是否說如果內容沒有改變,使用觸摸事件是安全的(因爲延遲的「點擊」事件不會再次觸發它)? –

+0

好吧,我剛剛在developers.google.com網站上閱讀了'preventDefault()'處理這個問題(有道理......)。所以我認爲只要內容沒有改變就是安全的。 –

2

如果您的網頁上的所有內容,可以點擊已經安裝了相應的vclick jQuery的事件處理程序,然後一個停止鬼點擊簡便的方法是對身體產生touchend事件處理程序,並調用它preventDefault

$(document.body).on('touchend', null, function(e) { 
    e.preventDefault(); 
}); 

請注意,這將使禁止觸摸的常規點擊,因此,除非您爲其添加vclick處理程序,否則任何傳統鏈接或窗體輸入都將停止工作。