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 相关文章推荐
javascript 读取图片文件的大小
Jun 25 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
Dec 08 Javascript
深入理解Java线程编程中的阻塞队列容器
Dec 07 Javascript
理解javascript定时器中的单线程
Feb 23 Javascript
实例讲解jQuery中对事件的命名空间的运用
May 24 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
Jun 03 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
Oct 28 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
Dec 25 Javascript
深入理解vue.js中的v-if和v-show
Jun 22 Javascript
jQuery创建及操作xml格式数据示例
May 26 jQuery
如何解决webpack-dev-server代理常切换问题
Jan 09 Javascript
小程序红包雨的实现示例
Feb 19 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
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
php数据库配置文件一般做法分享
2012/07/07 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
php处理复杂xml数据示例
2016/07/11 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
2016/04/01 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
python实现横向拼接图片
2020/03/23 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
python 爬虫请求模块requests详解
2020/12/04 Python
师范应届生语文教师求职信
2013/10/29 职场文书
生产副总岗位职责
2013/11/28 职场文书
幼儿园运动会入场词
2014/02/10 职场文书
食品安全标语
2014/06/07 职场文书
人力资源职位说明书
2014/07/29 职场文书
婚庆公司计划书
2014/09/15 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
Nginx如何配置Http、Https、WS、WSS的方法步骤
2021/05/11 Servers