【发布时间】:2009-10-28 15:43:22
【问题描述】:
我正在尝试在JavaScript 中设置一个函数来淡入或淡出我页面上的某些元素。淡入淡出本身工作正常,但是当其中一个试图取消另一个的动作时,我的问题就出现了。
//I know this is ugly, I'm just learning JavaScript again and plan to recode it after I learn some more...
var fadeOut = false
//set out to true to fade out, false to fade in
function fade(out) {
var steps = 1
var outSpeed = 100
var inSpeed = 10
var timer = 0
if (out) {
//fade out
fadeOut = true
for ( var i=100; i>=0; i-=steps ) {
if ( fadeOut ) {
setTimeout("set_el_opacity(" + (i / 100) + ")",
timer+=steps
} else {
break;
}
}
} else {
//fade in
fadeOut = false
for ( var i=0; i<=100; i+=steps ) {
if( !fadeOut ) {
setTimeout("set_el_opacity(" + (i / 100) + ")",
timer+=steps
} else {
break;
}
}
}
}
现在,淡出设置为比淡入慢。我希望用户看到它慢慢淡出,以便他们知道这是故意的,然后在需要元素时快速淡入(消除一些混乱不需要时从屏幕上显示)。
fade(true) 工作正常,fade(false) 工作正常并且速度更快。当我调用fade(true) 后不久调用fade(false) 时,我的问题就出现了。淡入淡出相互争斗,然后,由于淡出(true) 调用运行得更快,它首先完成,淡出淡出(false) 调用继续将其全部淡出。
我的问题是:我可以做些什么来使淡化(假)调用取消淡化(真)调用的循环?
【问题讨论】:
-
提示:切勿将字符串作为参数传递给
setTimeout/setInterval。如果您在生产中使用它,您的站点可能容易受到XSS 的攻击。请改用匿名函数:setTimeout(function() { set_el_opacity(i / 100); }, 1000);
标签: javascript multithreading loops break