【发布时间】:2013-06-02 20:36:32
【问题描述】:
这是我尝试编写一个动态的 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 将函数作为它的第一个参数,但是,您传递的是函数调用的结果。hide(id)立即调用该函数。去掉 (),你就没事了。 -
这个功能本质上是一个长时间的“淡出”。您是否有理由不使用 CSS 过渡?在现代浏览器上,CSS 动画是硬件加速的。
标签: javascript html recursion settimeout