setTimeout()函数的使用?
各位,请教一个问题,我用一个FOR循环,其中调用了SETTIMEOUT()函数,在setTtimeout函数返回之前循环会继续吗?我感觉没等函数返回循环就继续运行了。
程序大致如下:
for(i=0;i<100,i++){setTimeout(function1(i),500)}
我的本意是由变量i来控制画面的显示,可是结果似乎在第一次调用SETTIMEOUT函数后未等函数返回,循环就继续运行了,结果可能在第二次调用时i已经是100了,结果画面渐显的效果无法实现,画面一下就出来了,不知有什么解决办法?
问题点数:30、回复次数:5Top
1 楼xchunyu(大吊车)回复于 2001-11-29 13:51:38 得分 10
setTimeout只是在计时结束是调用一个函数.
你为什么不用一个算法来确定setTimeout的时间值呢?Top
2 楼chinaillboy(浪漫)回复于 2001-11-29 13:53:01 得分 10
use setInterval()Top
3 楼netscaler()回复于 2001-11-29 14:24:39 得分 0
修改了一下程序,好了些,但还是有问题。Top
4 楼feijunjun(军仔)回复于 2001-11-29 17:13:17 得分 10
用作参考
<html>
<head>
<title> New Document </title>
<script>
var opa = 20;
var tm;
var curobj;
function Show(obj){
curobj = obj;
filterShow();}
function filterShow(){
if(curobj==null)return;
opa+=2;
if(opa==102)opa=100;
curobj.style.filter="alpha(opacity=" + opa + ",style=0)";
tm = setTimeout(filterShow,20);}
function resetFilter(obj){
curobj=null;
opa=20;
obj.style.filter="alpha(opacity=20,style=0);"}
</script>
</head>
<body>
<img src=abc.gif onmouseover="Show(this)" onmouseout="resetFilter(this)" style="filter:alpha(opacity=20,style=0)">
</body>
</html>
Top
5 楼netscaler()回复于 2001-11-30 08:51:46 得分 0
谢谢各位,昨晚已经把程序基本实现了,方法和军仔的差不多,关键是函数应该递归调用,也就是循环子的放置位置,把函数放在FOR循环中达不到效果,想了一下原因,用递归实现可以保证循环子起到正确的作用,而在FOR循环中,由于SETITMEOUT函数要等一定的时间后才会执行,这时循环子已经达到最大值了,也就无法实现渐变的效果了。Top




