代码工作得很好,直到我添加了setTimeout。现在,无论我如何尝试调用setTimeout(setTimeout(function(){fadeOut()},1000);
setTimeout("fadeOut()",1000);
等中的函数),它似乎都没有进入函数。
我是一个Javascript新手,所以任何和所有的帮助是赞赏=]
javascript代码:
var slideArray = ["slide1","slide2","slide3","slide4","slide5","slide6"];
var currentSlide = null;
var current = null;
var done = false;
function fade(newSlide)
{
if(currentSlide === null)
{
currentSlide = slideArray[0];
document.getElementById(currentSlide).style.opacity = 1.0;
for(var i=1;i<slideArray.length;i++)
document.getElementById(slideArray[i]).style.opacity = 0.0;
}
current = document.getElementById(currentSlide);
done = false;
do
{
window.setTimeout(fadeOut,1000);
} while(done == false);
currentSlide = newSlide;
current = document.getElementById(currentSlide);
done = false;
do
{
window.setTimeout(fadeIn,1000);
} while(done == false);
}
function fadeOut()
{
if(parseFloat(current.style.opacity)-0.1>.0000001)
{
current.style.opacity = parseFloat(current.style.opacity) -0.1;
done = false;
}
else
{
current.style.opacity = 0.0;
done = true;
}
}
function fadeIn()
{
if(0.9-parseFloat(current.style.opacity)>.0000001)
{
current.style.opacity = parseFloat(current.style.opacity)+0.1;
done = false;
}
else
{
current.style.opacity = 1.0;
done = true;
}
}
答案 0 :(得分:3)
您无法使用此结构:
do
{
window.setTimeout(fadeIn,1000);
} while(done == false);
因为setTimeout()
中的代码在某个时间运行,所以你的完成值永远不会改变,这个循环将永远运行。并且,只要它运行,setTimeout()
也永远不会触发(因为javascript是单线程的)。
相反,如果你没有完成,你应该从setTimeout(fadeIn, 1000)
函数启动下一个fadeIn()
。
function fadeOut()
{
if(parseFloat(current.style.opacity)-0.1>.0000001)
{
current.style.opacity = parseFloat(current.style.opacity) -0.1;
setTimeout(fadeOut, 1000);
}
else
{
current.style.opacity = 0.0;
}
}
答案 1 :(得分:0)
请记住,javascript是单线程的,因此在完成运行当前脚本之前,不会调用setTimeout&#39; et函数。这将永远不会发生,因为你处在一个永远不会结束的循环中(直到你从所有那些setTimeout中取出内存)。只需调用setTimeout一次,让函数返回。并且忘记等待它发生的想法。