延时加载这个在Web开发当中最常见的一种了
函数延时加载,图片延时加载……
在JavaScript的学习过程中自己写的函数延时加载,在这里记录一下
写的不好之处希望可以帮我指出,不胜感激(^_^)(^_^)
// 函数延时执行,完美兼容ie、谷歌、火狐等浏览器的各个版本
function _delay(){
function Delay(){
this.task = [];
}
Delay.prototype = {
then: function(fn, time){
this.task.push({fn: fn, time: time || 0});
return this;
},
run: function(){
var
_this = this,
len = this.task.length,
task = this.task.shift(),
next_task = this.task[0],
that;
(function(){
that = arguments.callee;
if (task.time > 0)
task.fn(next_task.fn);
next_task = _this.task[0];
if (_this.task.length > 0) {
if (task.time <= 0) {
task.fn(that);
}else{
setTimeout(that, task.time);
}
task = _this.task.shift();
}
}());
return this;
}
}
return new Delay();
}
/**********************************
******* ***********
******* 这是一个案例 **********
******* ***********
var delay = new _delay();
delay
.then(function(next) {
alert('fn1是不是很郁闷呀');
}, 2000)
.then(function(next) {
alert('不要太郁闷哟');
setTimeout(function() {
alert('fn2这么延时真的好郁闷哟')
next();
}, 3000)
})
.then(function(next) {
alert('fn3你可以开心的浏览咯:-D:-D:-D');
}, 1000)
.run();
*********************************/
上面的兼容性好,再来一个ES6的(^_^)(^_^)
//函数延时执行,虽然代码量少但不支持老版本浏览器
function delayPromise(ms) {
return new Promise(function (resolve) {
setTimeout(resolve, ms);
});
}
/**********************************
******* ***********
******* 这是一个案例 **********
******* ***********
*
delayPromise(1000).then(function(){
console.log('1000ms后出现的弹窗,是不是很郁闷呀(*^_^*)(*^_^*)');
});
*********************************/