Javascript功能逐步改变

时间:2012-06-17 19:53:39

标签: javascript javascript-events settimeout

我使用此tutorial创建了一个基本的javascript函数,用于在给定的时间段内实现更改。

function fadetext(){ 
if(hex>0) {
hex-=11;
document.getElementById("sample").style.color="rgb("+hex+","+hex+","+hex+")";
setTimeout("fadetext()",20); 
}
else
hex=255
}

问题1:如何通过function输入变量;例如fadetext(element, time)。我无法通过简单地用变量替换值来实现这一目的。

问题2:是否是通过javascript逐步实施更改的标准(和正确)方法?对我来说,混淆点是我们在自己的函数中使用fadetext()函数。这不会超载吗?

2 个答案:

答案 0 :(得分:5)

您需要将函数而不是字符串传递给setTimeout

function fadeText(element, duration) {
    ...
    setTimeout(function() {
        fadeText(element, duration);
    }, 20);
}

此代码传递一个匿名函数,该函数捕获闭包中的原始参数。

答案 1 :(得分:1)

是的,您应该在函数外部设置fadetext()的计时器,并将hex外部定义为全局变量,这样您就可以解决这两个问题:) 并使用setInterval()来避免每次调用setTimeout,并调用函数而不是字符串。 (正如一位用户指出的那样,我的代码具有可重用性问题。)

var hex = 255;
setInterval(fadetext,20);

function fadetext(){ 
   if(hex>0) {
   hex-=11;
   document.getElementById("sample").style.color="rgb("+hex+","+hex+","+hex+")";
   }
}

作为奖励,您可以调查 jQuery ,淡入淡出(以及其他动画任务)变得非常简单,通常在单个命令或命令行中。