JavaScript - 浏览器选项卡切换上的间隔问题

时间:2013-01-13 13:59:45

标签: javascript tabs intervals clearinterval

我有一个简单的脚本可以淡入淡出一些图像。在切换到另一个选项卡然后切换回来之前,它完全正常工作。在切换回来之后,似乎运行动画的间隔不会被清除,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);

1 个答案:

答案 0 :(得分:1)

大多数浏览器都具有将内存使用容量重定向到唯一活动选项卡(当前正在查看)的功能。因此,当您切换当前标签时,setIntervalsetTimeout时间会受到影响(如果您使用的是Google Chrome浏览器,则可以通过按Shift + Esc查看每个标签的内存使用情况。当前标签将使用高达25%,而其余的不通过5%)