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中callee与caller的用法和应用场景
Dec 08 Javascript
javascript:void(0)是什么意思示例介绍
Nov 17 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
Feb 27 Javascript
js中自定义方法实现停留几秒sleep
Jul 11 Javascript
JQuery控制图片由中心点逐渐放大效果
Jun 26 Javascript
JS+html5制作简单音乐播放器
Sep 13 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
Jan 08 Javascript
Webpack path与publicPath的区别详解
May 03 Javascript
jQuery中each遍历的三种方法实例分析
Sep 07 jQuery
JavaScript使用类似break机制中断forEach循环的方法
Nov 13 Javascript
使用typescript构建Vue应用的实现
Aug 26 Javascript
JS自定义对象创建与简单使用方法示例
Jan 15 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
论建造顺序的重要性
2020/03/04 星际争霸
深入file_get_contents与curl函数的详解
2013/06/25 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
JavaScript清空数组元素的两种方法简单比较
2015/07/10 Javascript
iframe跨域通信封装详解
2015/08/11 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
python实现录音小程序
2020/10/26 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
文件上传服务器-jupyter 中python解压及压缩方式
2020/04/22 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
2020/05/19 Python
python缩进长度是否统一
2020/08/02 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
会计实习期自我鉴定
2013/10/06 职场文书
家长给小学生的评语
2014/01/30 职场文书
网络编辑职责
2014/03/01 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
大队委竞选演讲稿
2014/04/28 职场文书
师德师风建设方案
2014/05/08 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
安全责任书
2015/01/29 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技