`

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

 
阅读更多

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

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

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

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!

分享到:
评论

相关推荐

    C#编程经验技巧宝典

    24 &lt;br&gt;0051 变量的作用域 25 &lt;br&gt;2.5 其他 26 &lt;br&gt;0052 有效使用this对象 26 &lt;br&gt;0053 如何声明变量 26 &lt;br&gt;0054 如何声明相同类型的多个变量 26 &lt;br&gt;0055 利用Object变量传递参数 ...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    16.5.8 在单个类中创建多个迭代器 469 16.5.9 yield语句的要求 470 16.6 小结 470 第17章 反射、特性和动态编程 471 17.1 反射 471 17.1.1 使用System.Type访问元数据 472 17.1.2 成员调用...

    win版apache防ddos mod_dosevasive22

    发现攻击是通过创建一个内建的IP地址和URIs的动态哈希表来完成,并且阻止同一ip在以下的情况: 1.在同一秒多次请求同一页面 2.对同一child(对象?)作出超过50个并发请求 3.被列入黑名单的ip 这种方式在单点攻击和...

    asp.net知识库

    ADO.NET 2.0 大批量数据操作和多个动态的结果集 ADO.NET 2.0 异步处理 在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+...

    精通Windows.API-函数、接口、编程实例.pdf

    7.2.4 使用可等待计时器(Timer) 206 7.3 等待进程和线程的执行完成 209 第8章 服务 210 8.1 基本概念 210 8.1.1 服务控制器(SCM) 211 8.1.2 服务程序 211 8.1.3 服务控制管理程序 211 8.1.4 系统服务...

    精通WindowsAPI 函数 接口 编程实例

    7.2.4 使用可等待计时器(Timer) 206 7.3 等待进程和线程的执行完成 209 第8章 服务 210 8.1 基本概念 210 8.1.1 服务控制器(SCM) 211 8.1.2 服务程序 211 8.1.3 服务控制管理程序 211 8.1.4 系统...

    VB编程资源大全(源码 控制)

    对后来版本同样适用(8KB) 23,listtips.ZIP listbox中使每一item有不同的tip(2KB) 24,newctl.ZIP 动态创建控件的例子,解决了vb5中不能"无中生有"的毛病(2KB) 25,colourdg.ZIP 调用windows的...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例174 捕获多个异常 222 第8章 枚举与泛型的应用 223 8.1 枚举使用的简介 224 实例175 查看枚举类型的定义 224 实例176 枚举类型的基本特性 225 实例177 增加枚举元素的信息 226 实例178 选择合适的枚举元素 227 ...

Global site tag (gtag.js) - Google Analytics