在Javascript中调用没有元素ID的setTimeout

时间:2012-03-05 13:02:42

标签: javascript settimeout

我在Javascript中有以下代码用于淡入淡出动画:

var ticks = 20;
function fadein(tick,element){
    if(element == null)
        return;

    element.style.opacity = tick/ticks;
    if(tick < ticks) {
        var s = "fadein(" + (tick+1) + "," + element + ")";
        setTimeout(s, 500/ticks);
    }
}

问题在于这一行:

var s = "fadein(" + (tick+1) + "," + element + ")";

元素变为其字符串表示形式,并在下一次迭代时导致错误。我知道如果我的所有元素都通过eid传递ID,我可以这样做,但我希望淡化很多不同的东西(在不同的时间)并且不想为每个元素命名。有没有办法在js中做到这一点?

3 个答案:

答案 0 :(得分:2)

使用匿名函数代替字符串来调用setTimeout。这样您就可以轻松访问fadein函数中的所有变量。

除此之外,将setTimeoutsetInterval与字符串参数一起使用也被视为不良做法。

var ticks = 20;
function fadein(tick,element){
    if(element == null)
        return;

    element.style.opacity = tick/ticks;
    if(tick < ticks) {
        setTimeout( function() { fadein( tick+1, element ); }, 500/ticks);
    }
}

答案 1 :(得分:1)

使用函数而不是字符串:

var f = function () { fadein(tick+1, element) };
window.setTimeout(f, 500/ticks);

这样您就可以将元素作为参数发送,而不必将其转换为字符串表示形式。

setTimeout方法中使用字符串曾经是唯一的方法,但现在使用函数被认为是更好的做法。

答案 2 :(得分:0)

你可以传递一个函数而不是你的字符串... pure js

setTimeout(function(){.....}, 500/ticks);