我在这里有一个代码,其中imgNumb的值由timeElapsed变量定义。随着时间的推移,imgNumb的值从0开始到4的最大值,之后我希望它从0开始,就像循环中一样。大部分工作的功能是autoFade()。即使在JS中声明后仍然继续使用的时间
问题:问题是我声明elapsedTime等于延迟后,它只剩下4个持续时间的其余部分,并没有像以前那样增加。
请帮帮我!如果可以的话,我会非常感激!谢谢。
这里是下面的代码:
var a = document.getElementById("slidermain");
var b = a.getElementsByTagName("IMG");
var len = b.length;
var cusOpac = 0;
var delay = 4;
var imgNumb = 0;
var elem;
var now, before = new Date();
function autoFade(){
var loop = setInterval(function(){
now = new Date();
var timeDiff = (now.getTime() - before.getTime());
var elapsedTime = Math.floor(timeDiff/1000);
var lendelay = len*delay;
var currentFrame = Math.floor(elapsedTime/delay)-1;
var imgNumb = currentFrame % 5;
initFade(imgNumb);
}, delay*1000);
}
function initFade(imgNumb){
elem = b[imgNumb];
startFadeEffect(elem);
}
function startFadeEffect(elem){
opacSetting = cusOpac/10;
elem.style.opacity = opacSetting;
elem.style.display = "block";
cusOpac++;
if(cusOpac > 10){
cusOpac = 10;
}
var timer = setTimeout(function() { startFadeEffect(elem); }, 55);
if(opacSetting == 1){
clearTimeout(timer);
cusOpac = 10;
elem.style.opacity = 1;
setTimeout(function() { endFadeEffect(elem); }, (delay*1000)/2);
}
}
function endFadeEffect(elem){
opacSetting = cusOpac/10;
elem.style.opacity = opacSetting;
cusOpac--;
if(cusOpac < 0){
cusOpac = 0;
}
var timer = setTimeout(function() { endFadeEffect(elem); }, 55);
if(opacSetting == 0){
clearTimeout(timer);
elem.style.opacity = 0;
elem.style.display = "none";
cusOpac = 0;
return false;
}
}
请注意我在寻找一个JavaScript唯一的解决办法!
你已经在运行,每4秒的间隔,那么为什么你一直运行相当昂贵的操作(计算时间差 - 它永远是〜上次运行后4000毫秒),而不是简单地将1加到一个变量,并在它达到4时重置它? – h2ooooooo
我使用它作为我在下一个函数中创建的FadeIn和Out动画的计时器。因此,即使浏览器的选项卡未激活,动画也会继续运行。 –