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的ajaxSubmit()异步上传图片并保存表单数据演示代码
Jun 04 Javascript
动态载入js提高网页打开速度的方法
Jul 04 Javascript
js获取内联样式的方法
Jan 27 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
Nov 15 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
Jun 08 Javascript
JavaScript实现大图轮播效果
Jan 11 Javascript
JS设计模式之数据访问对象模式的实例讲解
Sep 30 Javascript
详解使用React进行组件库开发
Feb 06 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
Apr 26 Javascript
JS利用prototype给类添加方法操作详解
Jun 21 Javascript
webpack.DefinePlugin与cross-env区别详解
Feb 23 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
Sep 11 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
关于手调机和数调机的选择
2021/03/02 无线电
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
php利用cookie实现自动登录的方法
2014/12/10 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
七夕情人节丘比特射箭小游戏
2015/08/20 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
关于JS与jQuery中的文档加载问题
2017/08/22 jQuery
javascript中join方法实例讲解
2019/02/21 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
Python decimal模块使用方法详解
2020/06/08 Python
python文件读取失败怎么处理
2020/06/23 Python
美国最大的团购网站:Groupon
2016/07/23 全球购物
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
澳大利亚头发和美容产品购物网站:OZ Hair & Beauty
2020/03/27 全球购物
绝对经典成功的大学生推荐信
2013/11/08 职场文书
应届生自我鉴定
2013/12/11 职场文书
小学新学期教师寄语
2014/01/18 职场文书
中学生自我鉴定
2014/02/04 职场文书
《狐假虎威》教学反思
2014/02/07 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
教育合作协议范本
2014/10/17 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
民事调解协议书
2016/03/21 职场文书
浅谈:电影《孔子》观后感(范文)
2019/10/14 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
go语言中http超时引发的事故解决
2021/06/02 Golang
Java实现二分搜索树的示例代码
2022/03/17 Java/Android