JavaScript -在浏览器上,标签切换间隔不会通过clearInterval &窗口.聚焦/模糊被调用两次
JavaScript - On browsers tab switching Interval doesn't get cleared with clearInterval & window.onfocus/blur get called twice
我有一个简单的脚本淡入和淡出一些图像。在我切换到另一个标签然后切换回来之前,它工作得非常好。切换回来后,似乎间隔运行动画,不被清除,函数继续运行。
实际代码:
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窗口。Onfocus被调用两次!为什么两次?
请帮助以不同的方式解决第一个问题或第二个Chrome。谢谢!
这似乎是一个已知的chromium bug:
http://code.google.com/p/chromium/issues/detail?id=117307可能的解决方案如下:
- 如果你正在使用jQuery,你可以尝试使用
$.on('focus', startFading)
- 你可以设置一个布尔值,并确保startFading不会被调用多次:
的例子:
var startedFading = false;
function startFading() {
if (!startedFading) {
startedFading = true;
start = setInterval(fading, 3000);
}
}
function stopFading() {
startedFading = false;
console.log("stop");
clearInterval(start);
}
相关文章:
- 将事件聚焦/模糊在可编辑内容的元素上
- 聚焦和模糊错误元素触发的事件
- 在模糊上自动聚焦相同的文本框
- j查询模糊/聚焦未在动态添加的元素上触发
- 处理通过聚焦在子元素上并通过单击子元素外部触发的父元素的模糊事件
- AngularJS中模糊事件后的重新聚焦输入字段
- 聚焦时会触发角度模糊
- 聚焦和模糊jQuery事件不冒泡
- 窗口聚焦和模糊事件在Android浏览器上无法正常工作
- Dojo验证文本框模糊焦点..聚焦
- 模糊与聚焦——任何真正的区别
- 模糊和聚焦方法不适用于sencha触摸的文本字段
- 事件类型表达式在聚焦/模糊时从不为true
- 当输入聚焦时,在主体上添加点击事件,然后在模糊时将其移除
- 如何检测tinyMCE文本区域模糊/聚焦事件
- 动态聚焦模糊内容可编辑
- 用iframe识别窗口聚焦/模糊事件
- REACT——如何改变聚焦/模糊事件的点击状态
- 如何在angularJS指令中捕捉模糊或聚焦事件
- JQuery -元素不可聚焦的错误/如何强制模糊