javascript
  • accelerometer
  • addeventlistener
  • 2014-04-22 192 views 3 likes 
    3

    我正在使用JavaScript構建移動應用程序。走進它,我需要獲得從手機的加速計數據,所以我附上一個事件偵聽到它:JavaScript addEventListener延遲

    if (window.DeviceOrientationEvent) { 
        window.addEventListener("deviceorientation", function (event) { 
         if (typeof(event.alpha) != 'undefined') { 
          //here goes function for an event 
         } 
        }, false); 
    } 
    

    但問題是,它獲得的數據每毫秒,因此當我調用該函數繪製和重新繪製的東西根據這些數據,它每毫秒都會這樣做 - >應用程序崩潰。

    有什麼方法可以延遲或以較小的份數接收這些數據嗎?是否有函數來監聽事件,例如,每半秒鐘一次?

    回答

    1

    它被稱爲「功能反彈」。基本上,你在一定的時間內只執行一次你的東西。一個簡單的實現是:

    var lastExecution; 
    addEventListener("deviceorientation", function (event) { 
        var now = Date.now(); 
        if (now - lastExecution < 17) return; // ~60Hz 
        lastExecution = now; 
        ... 
    }, false); 
    

    (是的,lastExecution在第一未定義這是精)

    +0

    如果你有一個未定義的,你可以簡單的給它'0'問題在startValue – Martijn

    +1

    @Martijn是的,但是......在W如果日期在1970年以前,應該是一個問題:)哦,但是,「undefined」可能會給出一個難以理解的結果,但無論如何它都很好。 – MaxArt

    +0

    這不是要評論你的代碼,只是爲那些認爲它是問題的人提供解決方案:) – Martijn

    1

    我認爲你正在尋找類似detrottle /防抖動

    如果您有jQuery的, these guys made it easy

    window.addEventListener("deviceorientation", function (event) { 
        $.throttle(250, function (event){ 
         // Code here will excecute every 250 ms 
        }) 
    ); 
    
    +1

    從未提及過jQuery。 – MaxArt

    +0

    節流絕對獨立於jQuery。該「插件」只是將通用功能放在'$'命名空間中,用於任何目的;但與jQuery沒有多大關係。 – Bergi

    +0

    很好,修改它以表明它是jQuery,而不是建議dethrottle僅僅是jQuery。 – Martijn

    相關問題