[英]Javascript recursive timeout call
这是我尝试编写动态onmouseout事件,当鼠标离开div时缓慢改变不透明度。 由于某种原因,递归和超时似乎没有工作属性,并且不透明度的变化立即完成。
问题: 是否有任何理由说setTimeout()
不能用于递归? 有没有更好的方法来解决这个问题?
function hide(id)
{
if (gOpacity > .4)
{
gOpacity -= .1;
document.getElementById(id).style.opacity = gOpacity;
setTimeout(hide(id),1000)
}
else
{
gOpacity = 1.0
}
}
将setTimeout调用更改为
setTimeout(function() { hide(id); } ,1000)
所以它将在1s后执行,而不是立即执行
你试过这个吗?
function hide(id)
{
if (gOpacity > .4)
{
gOpacity -= .1;
document.getElementById(id).style.opacity = gOpacity;
setTimeout(function() {
hide(id);
},1000)
}
else
{
gOpacity = 1.0
}
}
当你输入时我瘦了:
setTimeout(hide(id),1000);
你真正的意思是:
setTimeout(hide.bind(this,id),1000);
因为在第一种情况下,函数将在调用setTimeout时立即调用 - 它是setTimeout-的参数。
在第二种情况下,这将是一个绑定函数。 所以是的,这个和id被评估,但是在1000毫秒过去之前不会调用该函数。
(这只是更快的运行/更快的类型创建函数的方式)。
通过setTimeout将所有代码包装在递归函数中
function hide(id) { setTimeout(function() { if (gOpacity > .4) { gOpacity -= .1; document.getElementById(id).style.opacity = gOpacity; hide(id); } else { gOpacity = 1.0 } },1000) }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.