return intervals[uid].fn;
};
// 更改对应计时器的间隔时间:uid为set_interval返回的计时器ID,time为要修改的时间间隔(单位毫秒)
window.change_interval_time = function(uid, time) {
if (!intervals[uid]) {
return;
}
intervals[uid].time = time;
};
// 更改对应计时器的额外参数:uid为set_interval返回的计时器ID,extra_args为要修改的额外参数(必须是数组) window.change_interval_args = function(uid, extra_args) {
if (!intervals[uid]) {
return;
}
intervals[uid].extra_args = extra_args;
};
// 更改对应计时器的执⾏函数:uid为set_interval返回的计时器ID,fn为要修改的执⾏函数(函数名或者匿名函数) window.change_interval_fn = function(uid, fn) {
if (!intervals[uid]) {
return;
js arguments}
intervals[uid].fn = fn;
};
// 开始计时器:参数为:要执⾏的函数、时间间隔(单位毫秒)、[额外参数1, 额外参数2, ...]
// 注意:调⽤后,会先⽴即执⾏要执⾏的函数,然后每隔指定的时间间隔,就会再次调⽤。
window.set_interval = function() {
if (arguments.length < 2 || typeof arguments[0] != 'function') {
return;
}
var uid = current_id++;
intervals[uid] = {
fn: arguments[0],
time: parseInt(arguments[1]),
need_stop: 0,
extra_args: [],
interval_func: function(uid) {
if (!intervals[uid] || intervals[uid].need_stop) {
return;
}
intervals[uid].fn.apply(null, intervals[uid].extra_args); // 传⼊调⽤者⾃定义的参数
setTimeout(intervals[uid].interval_func, intervals[uid].time, uid);
},
};
for (var i=2; i<arguments.length; i++) {
intervals[uid].extra_args.push(arguments[i]);
}
intervals[uid].interval_func(uid);
return uid;
};
})();
// 使⽤⽰例
var start = +new Date();
var uid = set_interval(function(arg1, arg2) {
console.log(+new Date() - start, arg1, arg2)
}, 1000, 'extra_arg1', 'extra_arg2');
change_interval_time(uid, 2000); // 改为每2秒执⾏1次
/
/ 改变要执⾏的函数
change_interval_fn(uid, function() {
console.log(11);
});
// 改变额外参数
change_interval_args(uid, ['change_arg1', 2, 3,'end']);
clear_interval(uid); // 清除该interval
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论