js 链式延迟执行DOME


Posted in Javascript onJanuary 04, 2012

这样的形式执行:

d.wait(3000).run(function(m){ //等待3秒 
alert('从前有座山'); 
}).wait(1000).run(function(m){ //等待1秒 
alert('山里有座庙'); 
}).wait(2000).run(function(m){ //等待2秒 
alert('庙里有一个老和尚给一个小和尚讲故事'); 
}).wait(3000).run(function(m){ //等待3秒 
alert('讲的故事是:'); 
}).goStart(); //跳到第一条重新执行,这句拿掉就只执行一次
<!doctype html> 
<html> 
<head> 
<title>异步执行</title> 
</head> 
<body> 
<script type="text/javascript"> 
function Delay(){ 
this.funList= []; 
this.index = 0; 
this.re = null; 
this.isloop = false; 
}; 
Delay.prototype = { 
wait:function(m){ 
if(this.funList[this.index] && typeof this.funList[this.index].fun != 'function'){ 
m += this.funList[this.index].m; 
} 
this.funList[this.index] = {m:m,fun:null}; 
return this; 
}, 
run:function(fun){ 
if(typeof this.funList[this.index].fun != 'function'){ 
this.funList[this.index].fun = fun; 
this.index++; 
}else{ 
this.index++; 
this.funList[this.index] = {'m':0,'fun':fun}; 
} 
this.start(); 
return this; 
}, 
start:function(){ 
var self = this; 
if(this.re) return; 
var setOutrun = function(funList,index){ 
if(funList[index] == undefined){ 
clearTimeout(self.re); 
return false; 
} 
var m = funList[index].m, 
fun = funList[index].fun; 
typeof fun == 'function' || (fun = function(){}); 
self.re = setTimeout(function(){ 
if(fun(index) === false)return false; 
if(self.isloop){ 
index = -1; 
self.isloop = false; 
} 
setOutrun(funList,++index); 
},m); 
} 
setOutrun(this.funList,0); 
}, 
stop:function(){ 
return clearTimeout(this.re); 
}, 
goStart:function(){ 
var self = this, 
fun = function(){ 
self.isloop = true; 
}; 
if(this.funList[this.index] && typeof this.funList[this.index].fun != 'function'){ 
this.funList[this.index].fun = fun; 
this.index++; 
}else{ 
this.funList[this.index] = {'m':0,'fun':fun}; 
} 
this.start(); 
} 
}; 
var d = new Delay(); 
d.wait(3000).run(function(m){ 
alert('从前有座山'); 
}).wait(2000).run(function(m){ 
alert('山里有座庙'); 
}).wait(2000).run(function(m){ 
alert('庙里有一个老和尚给一个小和尚讲故事'); 
}).wait(2000).run(function(m){ 
alert('讲的故事是:'); 
}).goStart(); 
</script></body> 
</html>
Javascript 相关文章推荐
利用Jquery实现可多选的下拉框
Feb 21 Javascript
如何编写高质量JS代码
Dec 28 Javascript
coffeescript使用的方式汇总
Aug 05 Javascript
jQuery动态添加
Apr 07 Javascript
js 求时间差的实现代码
Apr 26 Javascript
jQuery Mobile 触摸事件实例
Jun 04 Javascript
JavaScript代码执行的先后顺序问题
Oct 29 Javascript
JS中常用的消息框总结
Feb 24 Javascript
vue实现文件上传功能
Aug 13 Javascript
JQuery判断radio单选框是否选中并获取值的方法
Jan 17 jQuery
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
Jul 29 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
Nov 09 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
Jan 04 #Javascript
Textarea与懒惰渲染实现代码
Jan 04 #Javascript
js中有关IE版本检测
Jan 04 #Javascript
国外大牛IE版本检测!现在IE都到9了,IE检测代码
Jan 04 #Javascript
IE的有条件注释判定IE版本详解(附实例代码)
Jan 04 #Javascript
js变量以及其作用域详解
Jul 18 #Javascript
分享一个asp.net pager分页控件
Jan 04 #Javascript
You might like
15个小时----从修改程序到自己些程序
2006/10/09 PHP
PHP 数组排序方法总结 推荐收藏
2010/06/30 PHP
php使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
Angular Module声明和获取重载实例代码
2016/09/14 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
Python实现压缩与解压gzip大文件的方法
2016/09/18 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
PyQt实现计数器的方法示例
2021/01/18 Python
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
大学生简历中个人的自我评价
2013/10/06 职场文书
外企求职信范文分享
2013/12/31 职场文书
大学英语专业求职信
2014/06/21 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
付款委托书范本
2014/10/05 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
余世维讲座观后感
2015/06/11 职场文书
辩论赛新闻稿
2015/07/17 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android
Ruby处理YAML和json数据
2022/04/18 Ruby
python 使用pandas读取csv文件的方法
2022/12/24 Python