JavaScript addEventListener延迟

时间:2014-04-22 10:42:10

标签: javascript accelerometer addeventlistener

我正在使用JavaScript构建移动应用程序。进入它我需要从手机的加速度计获取数据,所以我附上一个事件监听器:

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

但问题是它每毫秒都会获得数据,因此当我根据这些数据调用函数绘制和重绘某些内容时,它每隔毫秒就会继续这样做 - >应用程序崩溃。

有没有办法延迟或以较小的部分接收这些数据?是否有一个功能来收听事件,例如,每半秒一次?

2 个答案:

答案 0 :(得分:1)

它被称为"功能去抖"。基本上,你只在一定时间内执行一次你的东西。一个简单的实现是:

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

(是的,lastExecution起初未定义。没关系。)

答案 1 :(得分:1)

我认为你正在寻找像detrottle / debounce这样的东西

如果你有jQuery,these guys made it easy

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