javascript – 递归setTimeout()在背景上暂停
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 递归setTimeout()在背景上暂停,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1377字,纯文字阅读大概需要2分钟。
内容图文
![javascript – 递归setTimeout()在背景上暂停](/upload/InfoBanner/zyjiaocheng/731/853906daa4774b1597fd3a7949992cc2.jpg)
我有一段代码:
var logo = $("#blinking-logo");
function logo_blink() {
logo.fadeOut(10).delay(10)
.fadeIn(10).delay(20)
.fadeOut(10).delay(10)
.fadeIn(10)
window.setTimeout(logo_blink, (Math.random()*(1500))+1500);
}
logo_blink();
它所做的就是在~30秒内闪烁一次图片(为了便于调试,时间较少)
当标签处于背景状态时,Chrome会暂停此计时器的问题,然后,当返回该标签时,它会闪烁背景中错过的所有闪烁.
我想在后台暂停计时器,但我不知道怎么做.我已经阅读了一些相关的帖子,但似乎他们描述了相反的问题.有没有办法检测标签的背景?
解决方法:
这是一个众所周知的特征.为了节省资源,Chrome不会在没有焦点的情况下更新窗口:)例如,您可以检查该窗口是否失去焦点并停止计时器.当窗口处于焦点时再次启动它.例如:
var timer = null;
var logo = $("#blinking-logo");
function logo_blink() {
if(timer) clearTimeout('timer');
logo.fadeOut(10).delay(10)
.fadeIn(10).delay(20)
.fadeOut(10).delay(10)
.fadeIn(10)
timer = window.setTimeout(logo_blink, (Math.random()*(1500))+1500);
}
logo_blink();
$(window).blur(function(){clearTimeout(timer); timer = null;});
$(window).focus(function(){if (!timer) timer = window.setTimeout(logo_blink, (Math.random()*(1500))+1500);});
像这样的东西.在我的一个带有动画的页面上,setInterval遇到了同样的问题,所以我只是在页面处于后台时暂停它.
if (!$.browser.msie)
{
$(window).focus(function(){paused = false;});
$(window).blur(function(){paused = true;});
}
而不是基于暂停标志的值跳过动画.
ps:使用下面讨论的优化更新代码.
内容总结
以上是互联网集市为您收集整理的javascript – 递归setTimeout()在背景上暂停全部内容,希望文章能够帮你解决javascript – 递归setTimeout()在背景上暂停所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。