Jos*_*eau 22 javascript jquery timing intervals
假设我有一个功能:
myFunc = function(number) {
console.log("Booyah! "+number);
}
Run Code Online (Sandbox Code Playgroud)
我希望它在设定的时间间隔内运行.听起来我应该使用setInterval,呵呵!
但是,如果我想运行相同功能的多个间隔,所有这些都在同一时间开始呢?
setInterval(function(){
myFunc(1);
}, 500);
setInterval(function(){
myFunc(2);
}, 1000);
setInterval(function(){
myFunc(3);
}, 2000);
Run Code Online (Sandbox Code Playgroud)
因此,第一个运行时间恰好两次,第二个运行一次,第二个和第三个之间相同.
你如何确保它们都在同一时间开始,以便它们同步?
JAA*_*lde 22
好问题,但在JS你不能.要在同一程序中执行多个功能,您需要同时执行多线程和一些深度计时和线程处理技能.JS是单线程的.setInterval
在延迟之后没有实际运行该函数,而是在延迟之后它将函数添加到事件堆栈中,以便在处理器可以运行时立即运行.如果proc正忙于另一个操作,则实际运行所需的时间将超过延迟时间.多个间隔/超时都会添加对同一事件堆栈的调用,因此它们会在proc可用时依次运行.
小智 6
function Timer(funct, delayMs, times)
{
if(times==undefined)
{
times=-1;
}
if(delayMs==undefined)
{
delayMs=10;
}
this.funct=funct;
var times=times;
var timesCount=0;
var ticks = (delayMs/10)|0;
var count=0;
Timer.instances.push(this);
this.tick = function()
{
if(count>=ticks)
{
this.funct();
count=0;
if(times>-1)
{
timesCount++;
if(timesCount>=times)
{
this.stop();
}
}
}
count++;
};
this.stop=function()
{
var index = Timer.instances.indexOf(this);
Timer.instances.splice(index, 1);
};
}
Timer.instances=[];
Timer.ontick=function()
{
for(var i in Timer.instances)
{
Timer.instances[i].tick();
}
};
window.setInterval(Timer.ontick, 10);
Run Code Online (Sandbox Code Playgroud)
并使用它:
function onTick()
{
window.alert('test');
}
function onTick2()
{
window.alert('test2');
}
var timer = new Timer(onTick, 2000,-1);
var timer = new Timer(onTick2, 16000,-1);
Run Code Online (Sandbox Code Playgroud)
对于有限数量的刻度,将最后一个参数更改为数字的正整数.我用-1表示连续运行.
忽略任何告诉你不能的人.你可以做任何你喜欢的事情!