2011-11-04 70 views
0

我使用phonegap和jquerymobile/jquery開發應用程序。 在開發過程中,我只有一個虛擬的iOS設備,現在我正在測試一個真實設備上的應用程序,我發現,點擊一個元素和處理這個事件之間的時間很長。 例如,如果我點擊一個圖標,顯示一個加載器圖標,但是這個圖標首先在下一頁被最終加載(顯示加載器很短的時間)的時刻進入。長時間做事件和使用jquerymobile/phonegap處理它

我用JavaScript開發了很長時間,並且始終注重執行性能,但這很奇怪。

該應用程序已在一個HTML文件中獲得約10個意見。然後點擊一個元素只顯示這些文件的下一部分。

有沒有人知道解決方案來解決像這樣的「錯誤」?

在此先感謝。

+0

您是否在非開發人員模式設備上進行了測試?之前從某些設備上看到,一旦它們處於開發者模式,輸入識別延遲可能會增加。我與這個線程上的另一個開發者進行了很長時間的談話http://stackoverflow.com/questions/7877419/what-are-common-sources-of-phonegap-with-jquery-mobile-performance-issues/7925211#7925211 about問題。在我的設備上(這不是開發者模式),頁面,過渡,一切都很好。非常敏感。在他身上,大約有1秒鐘的延遲。 – sgliser

回答

3

iPhone上的點擊延遲是用於區分點擊和滾動的功能。當綁定到click事件時,iOS會等待約300ms,以確定您是在單擊對象還是嘗試滾動頁面。

您可以使用jQuery Mobile的vclick事件,該事件的啓動速度要快得多,但您可能會遇到以下情況:vclick事件在連續兩次觸發時可能會導致多個元素被點擊。下面是如何使用vclick事件,並只捕獲事件觸發的第一一些示例代碼:

$(function() { 

    //setup a function to check if a vclick event has fired within the last 500ms 
    function check_vclick() { 

     //if a vclick event has fired in the last 500ms then return false 
     if (do_vclick == false) return false; 

     //otherwise set a flag to disallow vclicks for 500ms 
     do_vclick = false; 

     //setup a timeout to allow vclicks in 500ms 
     setTimeout(function() { 
      do_vclick = true; 
     }, 500); 

     //return true so the event handler knows it's ok to run its code 
     return true; 
    } 

    //setup a flag to allow/disallow vclick events from firing 
    var do_vclick = true; 

    //bind an event handler to the vclick event for an element 
    $('#link_id').bind('vclick', function() { 
     if (check_vclick()) { 
      //run the code associated with the element, if it's a link referencing a pseudo-page on the same HTML document, you can do something like this 
      $.mobile.changePage($(this.href)); 
     } 
    }); 
}); 

下面是對文件的鏈接$.mobile.changePage()http://jquerymobile.com/demos/1.0rc2/docs/api/methods.html

下面是該文檔的鏈接vclick(公告虛擬鼠標事件部分下的註釋):http://jquerymobile.com/demos/1.0rc2/docs/api/events.html