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 拾碎[三] 使用className属性
Oct 16 Javascript
30个最佳jQuery Lightbox效果插件分享
Apr 11 Javascript
基于jquery实现日历签到功能
Sep 11 Javascript
JS使用单链表统计英语单词出现次数
Jun 16 Javascript
Canvas实现放射线动画效果
Feb 15 Javascript
vue引入jq插件的实例讲解
Sep 12 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
Aug 09 Javascript
写一个移动端惯性滑动&amp;回弹Vue导航栏组件 ly-tab
Mar 06 Javascript
JS中Promise函数then的奥秘探究
Jul 30 Javascript
详解JS浏览器事件循环机制
Mar 27 Javascript
微信小程序去除左上角返回键的实现方法
Mar 06 Javascript
微信小程序之高德地图多点路线规划过程示例详解
Jan 18 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图片处理类(水印、透明度、旋转)
2015/10/21 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
php安装dblib扩展,连接mssql的具体步骤
2017/03/02 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
php + WebUploader实现图片批量上传功能
2019/05/06 PHP
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
2014/02/07 Javascript
JavaScript使用循环和分割来替换和删除元素实例
2014/10/13 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Python中的with...as用法介绍
2015/05/28 Python
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
python实现QQ批量登录功能
2019/06/19 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
玩具反斗城美国官网:Toys"R"Us
2016/09/17 全球购物
什么是数据抽象
2016/11/26 面试题
Prototype如何更新局部页面
2013/03/03 面试题
淘宝活动策划方案
2014/02/06 职场文书
美术指导求职信
2014/03/17 职场文书
市级优秀班主任事迹材料
2014/05/13 职场文书
大学生学期个人总结
2015/02/12 职场文书
通知格式
2015/04/27 职场文书
写给媳妇的检讨书
2015/05/06 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS