Javascript 设置超时问题
我试图在Javascript中创建jquery fadeto类型的效果,但是我的setTimeout命令有问题 代码如下:Javascript 设置超时问题,javascript,settimeout,Javascript,Settimeout,我试图在Javascript中创建jquery fadeto类型的效果,但是我的setTimeout命令有问题 代码如下: function textfade(y) { var x = document.getElementById("test"); var y; if (y == undefined) { y = 1.0; } x.style.opacity = y; y -=0.1; setTi
function textfade(y) {
var x = document.getElementById("test");
var y;
if (y == undefined) {
y = 1.0;
}
x.style.opacity = y;
y -=0.1;
setTimeout(function(){ textfade(y); }, 50);
}
问题是x.style.opacity=y
如果不这样做,超时运行正常。然而,有了它,它只运行一次函数,然后就消失了。虽然我觉得这是一个简单的错误,但我没有办法修复它
如有任何建议,将不胜感激
提前谢谢。我想,如果
设置超时
调用一个内部闭包,当前的不透明度级别保持在淡入淡出函数本身之外,那么这样做会更好,因此您不必传递它
function textfade(el) {
if (typeof el === "string") {
el = document.getElementById(el);
}
var opacity = 1.0;
(function fade() {
el.style.opacity = opacity;
opacity -= 0.1;
if (opacity > 0) {
setTimeout(fade, 50);
}
})();
}
每次执行
textfead()
时,在处演示您正在声明的y
,有效地销毁/重置传递的参数
删除:
var y;
确保在
test
元素已可用后运行它。在这里它可以正常工作:。这里:-不,因为当dom还没有准备好并且不可用时,函数是在head中调用的,而不是在onload中调用的(就像在Firdle中一样)
所以,在你的
<head>
<script>
function textfade() {...}
</script>
</head>
<body onload="textfade()">
<div id="test"> ... </div>
函数textfade(){…}
...
<代码>你的代码工作得很好。这里对我来说很好:可能在DOM就绪之前调用它。与你的问题无关,但是考虑添加终止条件(<代码>如果(y==0)< /代码>)。去掉<代码> var y;<代码>行,很好。你们都接受y
作为参数,并声明一个名为y
的局部变量。可能想做一个或另一个。你意识到在IE8和更低版本中,你创建了两个完全不同的fade
函数,对吗?该死的浏览器。。。理想情况下,我会使用一个匿名函数和参数。在setTimeout
调用中,被调用方
,但ECMA明智地反对参数。被调用方
:叹气:您只需使用一个匿名函数:var fade=function(){…};褪色()代码>或函数fade(){…}fade()代码>@JulienRoyer我更喜欢避免外部调用淡入淡出,而使用iLife的。@Alnitak:我也是,但有时你必须务实……啊!非常感谢你!这就成功了。我现在觉得自己很愚蠢。让我们把它归因于我花了太多时间在这个小动画上,以至于我的眼睛都快从脑袋里融化了。我非常感谢你的帮助。