我有一个简单的脚本可以淡入淡出一些图像。在切换到另一个选项卡然后切换回来之前,它完全正常工作。在切换回来之后,似乎运行动画的间隔不会被清除,animateFading
功能继续运行。
为什么会发生这种情况,标签切换如何影响脚本?我怎么能让它正常工作? THX!
真实的代码:
var img0 = document.getElementById("image0");
var img1 = document.getElementById("image1");
var img2 = document.getElementById("image2");
var imgs = [img0,img1,img2];
var intervalFading;
var intervalAnimate;
var imgThis = 0;
var imgNext = 1;
var fadeIn = 0;
var fadeOut = 1;
var start;
function animateFading() {
fadeIn+=0.1;
fadeOut-=0.1;
imgs[imgThis].style.opacity = fadeOut;
imgs[imgNext].style.opacity = fadeIn;
if (fadeIn >= 1) {
clearInterval(intervalAnimate);
if (imgNext < 2) {
imgNext++;
} else {
imgNext = 0;
}
if (imgThis < 2) {
imgThis++;
} else {
imgThis = 0;
}
fadeIn = 0;
fadeOut = 1;
}
}
function fading() {
intervalAnimate = setInterval(animateFading,50);
}
function startFading() {
start = setInterval(fading, 3000);
}
window.addEventListener('load', startFading);
解决方案:
var startedFading = false;
function startFading() {
if (!startedFading) {
startedFading = true;
startFading = setInterval(fading, 5000);
}
}
function stopFading() {
startedFading = false;
clearInterval(startFading);
}
window.addEventListener('focus', startFading);
window.addEventListener('blur', stopFading);
布尔值适用于Chrome,因为它会触发两次
window.addEventListener('focus', startFading);
&安培;
window.addEventListener('blur', stopFading);
答案 0 :(得分:1)
大多数浏览器都具有将内存使用容量重定向到唯一活动选项卡(当前正在查看)的功能。因此,当您切换当前标签时,setInterval
和setTimeout
时间会受到影响(如果您使用的是Google Chrome浏览器,则可以通过按Shift + Esc查看每个标签的内存使用情况。当前标签将使用高达25%,而其余的不通过5%)