利用List动态创建多个计时器

    技术2022-05-20  35

    今天遇见一个很棘手的问题,在页面上要使用计时器来控制地图上点和线的绘制,如果单纯的只绘制一条线,那么可以使用一个计时器解决问题,但是问题是我们的线是从数据库取出来的,并且要同时在页面上使用计时器绘制,达到的效果就是同时在绘制线!!

    但是动态的创建计时器该怎么办呢?

    一开始做了个示例代码,如下:

    var objList = [{length:1},{length:2},{length:4}];var countList = [0,0,0];for(var i=0;i<objList.length;i++){  objList[i].timer = setInterval(function(){  if(objList[i].length==countList[i]){   clearInterval(objList[i].timer);  }else{   alert(i);  }  countList[i]++  },1000);}

    结果一直报错,找出原因,每个计时器都是单独的,他们调用的代码也是当前设置的,如上,其调用的代码就是

    function(){  if(objList[i].length==countList[i]){   clearInterval(objList[i].timer);  }else{   alert(i);  }  countList[i]++  }

    这个时候变量i就相当于没有定义,就会报错,也就是说计时器中的代码不能出现局部变量的代码!!!!

    晕死!难道要我一个一个的去写计时器?这不是写死人了?

    最后想到在循环数据List的时候主要就是变量i在作怪,如果我能让每个计时器都有一个固定的i,那么问题不就解决了!!!

    好了,问题迎刃而解,解决的代码如下:

    var objList = [{length:1},{length:2},{length:4}];var countList = [0,0,0];var str = "";

    for(var i=0;i<objList.length;i++){ str += "objList["+i+"].timer = setInterval(function(){" str += "if(objList["+i+"].length==countList["+i+"]){"; str += "clearInterval(objList["+i+"].timer);"; str += "}else{"; str += "alert("+i+");"; str += "}" str += "countList["+i+"]++"; str += "},1000);";}

    eval(str);

    这段代码相当于在页面上写了很多定时器的代码,并且运行,OK!


    最新回复(0)