我正在使用Gamepad API - 特别是使用控制器上的操纵杆的轴。这些更新的位置经常发生 - 因此,我正在聆听的事件(棒上的动作)也会发生很多。有没有办法限制它发生在每秒25次以减少滞后?
答案 0 :(得分:9)
您无法限制触发JavaScript事件的速率,但您的事件处理程序可能会选择不对某些调用执行任何操作。以下是使用mousemove
的示例(我不知道您正在谈论哪个Gamepad API):
var lastMove = 0;
document.addEventListener('mousemove', function() {
// do nothing if last move was less than 40 ms ago
if(Date.now() - lastMove > 40) {
// Do stuff
lastMove = Date.now();
}
});
答案 1 :(得分:1)
您可以执行以下操作,在此处检查您在1秒间隔内调用事件的频率以及是否处理该事件。代码示例,粗略概述了我的想法(没有gaurantee(就像那个拼写))。
function process_event() {
var curr = new Date().getTime();
if ((curr - timeObj.last) < 1000) { //One Second
if (timeObj.counter > 25) {
for (var x=0;x<timeObj.times;x++) {
if ((curr - timeObj.times[x]) >= 1000) {
timeObj.times.splice(x, 1);
timeObj.counter -= 1;
}
}
}
else {
timeObj.counter += 1;
timeObj.times[timeObj.times.length()-1] = curr;
}
}
else {
timeObj.counter = 0;
timeObj.times = [];
}
if (timeObj.counter > 25) {
return False
}
else {
return True
}
}
答案 2 :(得分:0)
初始化一个每次事件侦听器激活时递增的变量。使它成为事件监听器输出的函数仅在变量低于25时发生。
答案 3 :(得分:0)
我很确定这可能是更好的解决方法。 ;)但不要相信我。大声笑。移动跟踪功能就是您要每秒触发25次的功能。
setInterval(movementTracking(), 40)
阅读有关它的摘要-> https://www.w3schools.com/jsref/met_win_setinterval.asp