Jquery:每隔x秒运行一次函数
Jquery: run function only every x seconds
我有一个相当性能密集型的调整大小函数,我不能正常运行,因为它会使浏览器混乱。我决定让函数每500ms运行不超过一次,如下所示:
var resizeRunning = 0;
window.addEventListener('resize', function() {
if (resizeRunning == 0) {
resizeRunning = 1;
$(".freebies_tile").each(function() {
$(this).waypoint(function() {
var el = this;
$(el).removeClass('not_loaded');
setTimeout(function() {
$(el).removeClass('not_active');
}, 500);
}, { offset: '100%', context: '.content_div', triggerOnce: true });
});
setTimeout(function() {
resizeRunning = 0;
}, 500);
}
}, true);
这工作,但我想知道是否有一个更短'更快的方法来实现相同的结果。
如果您希望调整大小逻辑的运行频率不超过每500ms,并且您不想错过任何调整大小的处理,您可以这样做。
这比你的有一个优点,如果一个调整大小事件在你最后一次处理后的500毫秒内出现,但是没有更多,这仍然会处理该调整大小事件。您的代码将错过上次的大小调整事件,因为它们在上次事件之后太短,您将永远不会处理最终大小。
// closure to store state variables without making globals
(function() {
var lastResizeProcessTime = 0;
var resizeTimer;
// don't call this more often than every 500ms
var minResizeTime = 500;
window.addEventListener('resize', function() {
var delta = new Date().getTime() - lastResizeProcessTime;
// if it's been a while since last resize, just do it now
if (delta >= minResizeTime) {
processResize();
} else {
// if resize not already scheduled, schedule one for
// minResizeTime from the last one
if (!resizeTimer) {
resizeTimer = setTimeout(processResize, minResizeTime - delta);
}
}
}, true);
function processResize() {
lastResizeProcessTime = new Date().getTime();
clearTimeout(resizeTimer);
resizeTimer = null;
$(".freebies_tile").each(function() {
$(this).waypoint(function() {
var el = this;
$(el).removeClass('not_loaded');
setTimeout(function() {
$(el).removeClass('not_active');
}, minResizeTime);
}, { offset: '100%', context: '.content_div', triggerOnce: true });
});
}
})();
工作演示:http://jsfiddle.net/jfriend00/v4xm6Lar/
每次处理大小调整时,是否应该或不应该进行尽可能多的DOM遍历是一个单独的问题。我们需要了解更多关于你的应用程序的上下文,以及在调整大小操作之间可能发生的变化,以知道你是否应该或可以缓存一些DOM信息,从一个调用到下一个。
相关文章:
- 使用每500ms运行一次的jquery函数是个好主意吗
- Javascript函数,需要每隔30秒递减一次
- 当元素可见时,jQuery滚动函数会触发一次
- 使函数只运行一次(Javascript)
- 如何在Javascript中设置函数在上一次结束时启动
- 运行“;非“;单击另一个函数中的函数仅一次
- 角函数每秒钟增加一次
- JavaScript只有在最后一次被调用时才运行函数
- 如何只使用一次window.onload函数
- 如何每 10 秒调用一次 JS 函数,然后以角度激活一个函数
- 节点 js 在启动时调用函数一次
- 有人可以帮助我调试带有addClass和removeClass函数的“每个会话一次”cookie吗?
- 如何在 window.setInterval 中每分钟运行一次 getJSON 函数
- 一次将多个对象传递给函数参数
- 就绪函数上的指令只能执行一次
- 一段时间后调用函数,但只调用一次
- 如何加载一个html页面并在其中只需单击一次即可运行函数
- Javascript只使用setInterval()调用一个子函数一次
- 元素在JavaScript函数中只更改过一次
- 函数只更改一次内容