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 伪数组实现方法
Oct 11 Javascript
js解析与序列化json数据(三)json的解析探讨
Feb 01 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
Nov 12 Javascript
Jquery遍历checkbox获取选中项value值的方法
Feb 13 Javascript
Javascript HTML5 Canvas实现的一个画板
Apr 12 Javascript
JavaScript ES6中CLASS的使用详解
Nov 22 Javascript
使用vue如何构建一个自动建站项目
Feb 05 Javascript
Vue 按键修饰符处理事件的方法
May 04 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
Aug 30 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
Mar 06 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
Aug 20 Javascript
详解javascript void(0)
Jul 13 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
easyui的tabs update正确用法分享
2014/03/21 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
2014/12/25 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
2016/06/06 PHP
PHP使用数组实现矩阵数学运算的方法示例
2017/05/29 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2019/09/10 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
Python读写unicode文件的方法
2015/07/10 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
python 循环while和for in简单实例
2016/08/16 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
Python多进程原理与用法分析
2018/08/21 Python
对于Python深浅拷贝的理解
2019/07/29 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
python删除某个目录文件夹的方法
2020/05/26 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
应届生法律求职信
2013/10/22 职场文书
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
创业大赛策划书
2014/03/01 职场文书
村长贪污检举信
2014/04/04 职场文书
2015中秋祝酒词
2015/08/12 职场文书
导游词之太湖
2019/10/08 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL