setTimeout没有'似乎没有调用函数
setTimeout doesn't seem to be calling the function
在添加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;
}
}
您不能使用以下结构:
do
{
window.setTimeout(fadeIn,1000);
} while(done == false);
因为setTimeout()
中的代码在以后的某个时间运行,所以done的值永远不会更改,这个循环将永远运行。而且,只要它运行,setTimeout()
就永远不会启动(因为javascript是单线程的)。
相反,如果没有完成,您应该从fadeIn()
函数中启动下一个setTimeout(fadeIn, 1000)
。
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;
}
}
请记住,javascript是单线程的,因此在运行完当前脚本之前,不会调用setTimeout’et函数。这永远不会发生,因为你处于一个永远不会结束的循环中(直到你从所有的setTimeout中耗尽内存)。只需调用setTimeout一次,然后让函数返回即可。忘记等待它发生的想法。
相关文章:
- 如何从模块链中调用函数.导出到节点中
- 调用函数内部的函数
- 在javascript中调用c函数
- DropDownListFor赢得't在更改时调用函数
- Javascript页面调用函数
- 在动画结束之前调用函数
- 允许父窗口在其不同域的子iframe上调用函数
- 运行Infinite Scroll后调用函数时出现问题
- JavaScript:在调用函数的文本输入上按enter键
- 使用大括号和不使用bracs调用函数的区别
- javascript在事件上调用函数
- 从index.html调用函数,该函数无限循环
- 从带参数的字符串变量调用函数中的函数
- 为什么 JS 不在滚动时调用函数
- 是否可以在不更改上下文的情况下调用函数.apply
- 如何在ES6类中使用参数调用函数
- AngularJS:调用函数时编号不更新
- JavaScript中的立即调用函数表达式(IIFE)-传递jQuery
- 在JavaScript中调用函数时自定义此选项
- 调用函数中声明的变量