for循环和setTimeout模拟ext进度条
来源:互联网 发布:在线sql注入漏洞检测 编辑:程序博客网 时间:2024/05/20 21:47
昨天学习ext的时候 想模拟一个进度条弹窗 大概这样
Ext.onReady(function () {var msgBox = Ext.MessageBox.show({ title:'提示', msg:'请稍后', modal:true, width:300, progress:true, animEl:"esttest", buttons:Ext.MessageBox.YESNOCANCEL, icon:Ext.MessageBox.QUESTION }); for(var i = 1; i < 10; i++){ setTimeout(function(){ var x=a/9; msgBox.updateProgress(x,Math.round(x*100)+"% 正在加载"); },1000*a); }});实际运行并不不能达到预期,查阅资料才知道 for循环 嵌套setTimeout时 ,他们是异步进行的,再继续查阅,要实现他们的正常调用。要用到闭包的知识,
经过一晚上的学习,我大概能了解了闭包的含义。
这里就总结下自己遇到的问题吧
首先最后实现代码是这样的:
for(var i = 1; i < 10; i++){ (function(a){ setTimeout(function(){ var x=a/9; msgBox.updateProgress(x,Math.round(x*100)+"% 正在加载"); console.log(a); },1000*a); })(i); }
为了调试 我在setTimeout里加一个alert(a),而结果却是乱的 虽然能输出1-10 但是顺序错乱了,至于原因,我猜大概是alert和ext消息框之间的冲突。(这个问题留在以后研究了)这里如果 for的i直接传入定时器 那i不会等待计时器完成操作,而是自己循环十次。解决方法就是把计时器外层加一个函数,这样计时器虽然也不会等待,但是外层函数会依次把1-10得数接收进来,但是进度条走加载的时候几乎也是同步进行。所以会在计时器时间上设置1000*a这样保证计时器根据i的值依次往后执行。
0 0
- for循环和setTimeout模拟ext进度条
- for循环和setTimeout
- for循环与setTimeout
- for循环中的setTimeout()
- setTimeout和setInterval区别 setTimeout模拟setInterval
- js for循环 setTimeout与setInterval测试
- js关于for循环里的setTimeout
- for循环中加入延时函数setTimeout
- 关于for循环中引用setTimeout
- js for循环中加settimeout问题
- for循环中setTimeout使用注意
- flex在for循环中使用setTimeout
- for循环中执行setTimeout问题
- 让我理解闭包和’经典setTimeout,for循环的面试题‘的文章
- smarty 模拟 for 循环
- Ext.Net 1.x_Ext.Net.TaskManager模拟进度条
- Ext 进度条
- Ext进度条
- php中的数据库操作类、分页类,以及smarty扩展类
- 统计图中:仅用前几条数据记录来画统计图
- 基于Netty5.0高级案例一之NettyWebsocket
- 浅谈 SOLID 原则的具体使用
- android audio服务启动
- for循环和setTimeout模拟ext进度条
- Android:Field can be converted to a local varible 处理方法
- 冒泡排序
- #早安,努力#12.1
- 软件过程模型
- ProjectEuler习题
- SQL Server使用ROW_NUMBER()来分页
- 我的博客编写规范
- Shiro介绍和使用