繁体   English   中英

Javascript递归超时调用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM