在jQuery中运行this()的更有效方法是什么?

时间:2017-09-03 22:34:59

标签: javascript jquery setinterval

每次用户点击,滚动或移动鼠标时,我都会运行一个函数。一直清除和设置间隔似乎要做很多事情,因为我想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);
    });
});

2 个答案:

答案 0 :(得分:0)

如果您只想创建一次该功能,可以使用:

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

每次在元素中使用此函数时,只需将myClass类添加到$(this)即可。

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

答案 1 :(得分:0)

首先我想到的是:你在全局范围内声明一个布尔值,并在需要的事件发生时将其设置为using Array<T,3>::operator...。然后在特定的时间间隔(例如100毫秒)检查该布尔值的更改。我认为这是一种优化方式。

true
var thatHappend = false;
$('#sample').on('click dblclick mousemove keypress scroll', function (e) {
    thatHappend = true;
});


setInterval(function () {
        if (thatHappend) {
           console.log('Hey!');
           thatHappend = false;
        }
  }, 100);