0

我有一个简单的脚本,可以淡入淡出一些图像。在我切换到另一个选项卡然后切换回来之前,它工作得非常好。切换回来后似乎运行动画的间隔,没有被清除并且功能继续运行。

真实代码:

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);

所以我想出了以下解决方案:

function startFading() {
start = setInterval(fading, 3000);
}

function stopFading() {

    console.log("stop");
    clearInterval(start);
}


window.addEventListener('focus', startFading);    
window.addEventListener('blur', stopFading);

这解决了问题。但仅适用于 FF。在 FF 中,脚本运行得非常完美。在 Chrome 中 window.onfocus 被调用了两次!为什么两次?

请帮助以不同的方式解决第一个问题或使用 Chrome 解决第二个问题。谢谢!

4

1 回答 1

0

这似乎是一个已知的铬错误:

http://code.google.com/p/chromium/issues/detail?id=117307

可能的解决方案是:

  1. 如果您使用的是 jQuery,您可以尝试使用$.on('focus', startFading)
  2. 您可以设置一个布尔值并确保 startFading 不会被多次调用:

例子:

var startedFading = false;

function startFading() {
    if (!startedFading) {
        startedFading = true;
        start = setInterval(fading, 3000);
    }
}

function stopFading() {
    startedFading = false;
    console.log("stop");
    clearInterval(start);
}
于 2013-01-13T03:18:16.833 回答