是否可以使用javascript / jquery执行以下操作?
使用带有函数名数组的setInterval,如果数组只有1个函数,如果用户在10:00:00打开网页,则应该执行以下操作
function 1 - 10:00:00
function 1 - 10:00:01
function 1 - 10:00:02
function 1 - 10:00:03
function 1 - 10:00:04
然后,如果用户单击另一个按钮,则会将新的函数名称添加到数组中,最终执行以下操作:
function 1 - 10:00:05
function 2 - 10:00:06
function 1 - 10:00:07
function 2 - 10:00:08
function 1 - 10:00:09
function 2 - 10:00:10
function 1 - 10:00:11
function 2 - 10:00:12
function 1 - 10:00:13
如果用户第三次点击该按钮,则会将新的函数名称添加到数组中,最终执行以下操作:
function 1 - 10:00:14
function 2 - 10:00:15
function 3 - 10:00:16
function 1 - 10:00:17
function 2 - 10:00:18
function 3 - 10:00:19
function 1 - 10:00:20
function 2 - 10:00:21
function 3 - 10:00:22
这可能吗?如果有可能,有人可以帮我提供一些关于如何实现这一目标的示例脚本吗?
答案 0 :(得分:6)
一个简单的机制:
var intervalWork = (function() {
var workers = [], wi = 0;
var interval = setInterval(function() {
if (!workers.length) return;
workers[wi](wi);
wi = (wi + 1) % workers.length;
}, 60 * 1000);
return function(w) {
workers.push(w);
};
})();
然后你有一个名为“intervalWork”的函数,它允许将一个函数添加到队列中。每个定时器间隔一个功能(此处为60秒)将运行。函数在队列中传递它们的索引;这似乎并不常见,但它可以让你打印出这些消息。
该函数将被调用如下:
intervalWork(function(index) {
// do interesting stuff
console.log("Function " + index + " " + new Date());
});
或者您可以调用它并传递已定义函数的名称:
intervalWork(someRandomFunction);
你当然可以让这个更有魅力并提供其他执行模式,或者其他什么。你没有描述这段代码的整体要点,所以我真的不知道你还想要什么。
编辑 - 还有一个注意事项:很多人可能(正确地)建议使用setInterval()
机制,而不是由浏览器的setTimeout()
机制驱动的计时器。并自己完成设置每个后续计时器的工作。这在很像你的情况下很重要,因为你不能控制那些“工人”功能的作用,因此完成的工作量是无限的。然而,基本设置是相同的。
答案 1 :(得分:1)
var functions = [function () {console.log('function 1')}];
var idx = 0;
setInterval(function () {
functions[idx]();
idx = (idx + 1) % functions.length;
}, 1000);
// on button click:
functions.push(function () {console.log('function 2')});