一个简单的js队列,逻辑很清晰
function Queue(type) { //type 是否是一个接着一个执行 function QueueConst() {} QueueConst.execute_ing=[], QueueConst.execute_no=[], QueueConst.state=1, QueueConst.type = type?type:false QueueConst.prototype.stop=function () {//暂停 QueueConst.state=2 } QueueConst.prototype.reset=function () { //恢复 QueueConst.state=3 QueueConst.prototype.execute(); } QueueConst.prototype.execute=function () { //执行队列 if(QueueConst.state==2) return; var currentItem = null if(QueueConst.execute_ing.length>0){ currentItem = QueueConst.execute_ing.shift() if(QueueConst.type){ currentItem(QueueConst.prototype.reset) QueueConst.prototype.stop() }else { currentItem() QueueConst.prototype.execute() } //执行当前 }else { if(QueueConst.execute_no.length<1) {//完成队列里面的任务; QueueConst.state = 1 return }; QueueConst.execute_ing = QueueConst.execute_no QueueConst.execute_no=[] QueueConst.prototype.execute() } } QueueConst.prototype.add=function (item) {//添加任务 QueueConst.execute_no.push(item) if(QueueConst.state==1) QueueConst.state=3 QueueConst.prototype.execute(); } return new QueueConst() } var que = Queue(true); que.add(function (next) { var index = 1; var loop = setInterval(function () { console.log(index++) },1000) setTimeout(function () { next();console.log('one') clearInterval(loop) },5000) }) que.add(function (next) { var index = 1; var loop = setInterval(function () { console.log(index++) },1000) setTimeout(function () { next();console.log('two') clearInterval(loop) },3000) }) setTimeout(function () {que.add(function (next) {console.log('three')})},10000)
http://www.cnblogs.com/jiebba/p/6575214.html
http://www.cnblogs.com/jiebba 我的博客,来看吧!
感觉可以就推荐下吧!!
感觉可以就推荐下吧!!
感觉可以就推荐下吧!!
感觉可以就推荐下吧!!
感觉可以就推荐下吧!!