我正在使用JavaScript构建移动应用程序。进入它我需要从手机的加速度计获取数据,所以我附上一个事件监听器:
if (window.DeviceOrientationEvent) {
window.addEventListener("deviceorientation", function (event) {
if (typeof(event.alpha) != 'undefined') {
//here goes function for an event
}
}, false);
}
但问题是它每毫秒都会获得数据,因此当我根据这些数据调用函数绘制和重绘某些内容时,它每隔毫秒就会继续这样做 - >应用程序崩溃。
有没有办法延迟或以较小的部分接收这些数据?是否有一个功能来收听事件,例如,每半秒一次?
答案 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
})
);