Javascript 在jQuery中更有效地在()上运行它?

Javascript 在jQuery中更有效地在()上运行它?,javascript,jquery,setinterval,Javascript,Jquery,Setinterval,每次用户单击、滚动或移动鼠标时,我都会运行一个函数。一直清除和设置时间间隔似乎是一件很难的事情,因为我猜mousemove和scroll会一直生成数百个动作,这意味着它会清除和设置数百次?有没有更好的方法来实现这一点,或者说,这对浏览器来说是小菜一碟?这里没有显示timerFunction(),但如果这很重要,我可以提供更多代码 $(document).ready(function () { idleInterval = setInterval(timerFunction, 5000);

每次用户单击、滚动或移动鼠标时,我都会运行一个函数。一直清除和设置时间间隔似乎是一件很难的事情,因为我猜mousemove和scroll会一直生成数百个动作,这意味着它会清除和设置数百次?有没有更好的方法来实现这一点,或者说,这对浏览器来说是小菜一碟?这里没有显示timerFunction(),但如果这很重要,我可以提供更多代码

$(document).ready(function () {
    idleInterval = setInterval(timerFunction, 5000);

    $(this).on('click dblclick mousemove keypress scroll', function (e) {
        clearInterval(idleInterval);
        idleInterval = setInterval(timerFunction, 5000);
    });
});

如果希望只创建一次函数,可以使用以下方法:

$(document).on('click dblclick mousemove keypress scroll', '.myClass', function (e) {
    clearInterval(idleInterval);
    idleInterval = setInterval(timerFunction, 5000);
});
每次在元素中使用此函数时,只要在需要使用时将
myClass
类添加到$(this)即可


如果您的timerFunction每次都不同,您可以将它们存储到数组中并映射它们

我想到的第一件事是:在全局范围上声明一个布尔值,并在所需事件发生时将其设置为
true
。然后你在特定的时间间隔检查布尔值的变化,比如说100毫秒。我认为这是一种优化方法

var thatHappend=false;
$(“#示例”)。在('click dblclick mousemove keypress scroll',函数(e){
Thaphappend=正确;
});
setInterval(函数(){
如果(那件事发生了){
console.log('Hey!');
thatHappend=错误;
}
}, 100);


美元是什么(这个)?这个元素有选择器吗?你只是觉得有很多事情要做,还是你测量了它并确定它是一个性能问题?我怀疑你要求的是
debounce()。。。我真的认为这不存在性能问题。在通常的做法中,在事件上清除一个间隔,这不存在性能问题。。。事件如果有很多事件。很难找到一个设备不能处理这个简单的任务。这种递归可能会填满堆栈。你可以改用setInterval。哦,因为我不是javascript的活跃用户,所以我不知道
setInterval
。谢谢@奈维勒那泽兰:不,它不能。什么不能,为什么不能?请elaborate@NevilleNazerane:
timeout
设置计时器。它不会直接调用自身,也不会使用无限的堆栈空间。函数不是只创建了一次吗?(在显示的代码中,
这个
不是
文档吗?)是的。在问题更新之前,我已经发布了此代码。在原始问题中,
$(document).ready
部分没有显示,我们都不知道他正在尝试更新document元素。