setinterval 工作非常随机
setinterval working very randomly
嗨,
我有这个代码:
//<![CDATA[
$(window).load(function(){
setInterval(function(){
// toggle the class every 10 seconds
$('body').addClass('new');
setTimeout(function(){
// toggle back after 10 seconds
$('body').removeClass('new');
},10000)
},10000);
});//]]>
此代码应该在页面首次加载后 10 秒后将 class "new" 添加到正文中,然后在 10 秒后再次将其删除以重新开始进入无限循环。但它不会按预期工作。有时添加 class 需要超过 10 秒的时间,并且它会很快将其删除。有时它只执行一次,然后循环就这样结束。
这里有什么问题吗?更有效和可靠的替代方案也将受到欢迎。
谢谢。
您已经告诉代码每 10 秒将 class 添加到 运行。每 10 秒,您还安排一个计时器在 10 秒后删除 class。因此,从第 20 秒开始,你有一场比赛——第一个计时器会先到达那里,还是第二个?无论如何,它不会有你想要的结果。
使用一个定时器来切换:
setInterval(function() {
$("body").toggleClass("new");
}, 10000);
至于需要很长时间才能启动,请记住 window
load
事件在 所有 资源下载完成后才会发生,包括你所有的图像等等。所以整个过程可能比你预期的要晚很多。
另请注意,浏览器在非活动选项卡中的计时器越来越多 "dialing back",因此当 window它在没有焦点。
来自您的评论:
But just as a bonus. What if I want to have the class to last 20 seconds but keep the interval in 10 seconds?
这使事情变得复杂。你可以有一个你切换的标志,并且只在标志处于一种状态或另一种状态时切换 class 。例如,类似于:
(function() { // Scoping function so the flag isn't a global
var flag = true;
setInterval(function() {
if (flag) {
$("body").toggleClass("new");
}
flag = !flag;
}, 10000);
})();
这将在 10 秒添加 class,在 20 秒切换标志,在 30 秒移除 class,在 40 秒切换 class,然后再次开始循环。根据需要进行调整。
嗨,
我有这个代码:
//<![CDATA[
$(window).load(function(){
setInterval(function(){
// toggle the class every 10 seconds
$('body').addClass('new');
setTimeout(function(){
// toggle back after 10 seconds
$('body').removeClass('new');
},10000)
},10000);
});//]]>
此代码应该在页面首次加载后 10 秒后将 class "new" 添加到正文中,然后在 10 秒后再次将其删除以重新开始进入无限循环。但它不会按预期工作。有时添加 class 需要超过 10 秒的时间,并且它会很快将其删除。有时它只执行一次,然后循环就这样结束。
这里有什么问题吗?更有效和可靠的替代方案也将受到欢迎。
谢谢。
您已经告诉代码每 10 秒将 class 添加到 运行。每 10 秒,您还安排一个计时器在 10 秒后删除 class。因此,从第 20 秒开始,你有一场比赛——第一个计时器会先到达那里,还是第二个?无论如何,它不会有你想要的结果。
使用一个定时器来切换:
setInterval(function() {
$("body").toggleClass("new");
}, 10000);
至于需要很长时间才能启动,请记住 window
load
事件在 所有 资源下载完成后才会发生,包括你所有的图像等等。所以整个过程可能比你预期的要晚很多。
另请注意,浏览器在非活动选项卡中的计时器越来越多 "dialing back",因此当 window它在没有焦点。
来自您的评论:
But just as a bonus. What if I want to have the class to last 20 seconds but keep the interval in 10 seconds?
这使事情变得复杂。你可以有一个你切换的标志,并且只在标志处于一种状态或另一种状态时切换 class 。例如,类似于:
(function() { // Scoping function so the flag isn't a global
var flag = true;
setInterval(function() {
if (flag) {
$("body").toggleClass("new");
}
flag = !flag;
}, 10000);
})();
这将在 10 秒添加 class,在 20 秒切换标志,在 30 秒移除 class,在 40 秒切换 class,然后再次开始循环。根据需要进行调整。