当页面未处于活动状态时,是否有办法阻止setTimeout("myfunction()",10000);
向上计数。例如,
myfunction()
直到他们再回来8000毫秒才开火。答案 0 :(得分:35)
你走了:
(function() {
var time = 10000,
delta = 100,
tid;
tid = setInterval(function() {
if ( window.blurred ) { return; }
time -= delta;
if ( time <= 0 ) {
clearInterval(tid);
myFunction(); // time passed - do your work
}
}, delta);
})();
window.onblur = function() { window.blurred = true; };
window.onfocus = function() { window.blurred = false; };
答案 1 :(得分:6)
ŠimeVidas的精彩回答,它帮助我完成了自己的编码。为了完整起见,我举了一个例子,如果你想使用setTimeout而不是setInterval:
(function() {
function myFunction() {
if(window.blurred) {
setTimeout(myFunction, 100);
return;
}
// What you normally want to happen
setTimeout(myFunction, 10000);
};
setTimeout(myFunction, 10000);
window.onblur = function() {window.blurred = true;};
window.onfocus = function() {window.blurred = false;};
})();
您会看到窗口模糊检查的设置时间比正常时间短,因此您可以根据窗口重新获得焦点时需要多长时间运行该功能来设置此值。
答案 2 :(得分:3)
您可以执行以下操作:
$([window, document]).blur(function(){
// Clear timeout here
}).focus(function(){
// start timeout back up here
});
Window适用于IE,文档适用于其他浏览器世界。
答案 3 :(得分:0)
答案 4 :(得分:0)
我在滑块中使用与ŠimeVidas几乎相同的方法
但我的代码基于document.visibilityState
进行页面可见性检查:
var interval = 4000;
function slideshow() {
// slideshow code
};
$(document).ready(function() {
var switchInterval;
function intervalHandler() {
switchInterval = setInterval(function() {
if (document.visibilityState === "visible") {
slideshow();
} else {
return;
}
}, interval);
}
intervalHandler();
});