如何在javascript中管理多个计时器?

如何在javascript中管理多个计时器?,javascript,jquery,html,timer,Javascript,Jquery,Html,Timer,下面是我用于一个计数计时器的编码: var sec = 0; function pad ( val ) { return val > 9 ? val : "0" + val; } function setTime() { document.getElementById("seconds0").innerHTML=pad(++sec%60); document.getElementById("minutes0").innerHTML=pad(parseInt(s

下面是我用于一个计数计时器的编码:

var sec = 0;
function pad ( val ) { return val > 9 ? val : "0" + val; }       
function setTime()
{
    document.getElementById("seconds0").innerHTML=pad(++sec%60);
    document.getElementById("minutes0").innerHTML=pad(parseInt(sec/60,10));
}

var timer = setInterval(setTime, 1000);
如果我有两个计时器,我会这样写:

var sec = 0;
var sec1 = 0;
function pad ( val ) { return val > 9 ? val : "0" + val; }       
function setTime()
{
    document.getElementById("seconds0").innerHTML=pad(++sec%60);
    document.getElementById("minutes0").innerHTML=pad(parseInt(sec/60,10));
}
function setTime1()
{
    document.getElementById("seconds1").innerHTML=pad(++sec1%60);
    document.getElementById("minutes1").innerHTML=pad(parseInt(sec1/60,10));
}

var timer = setInterval(setTime, 1000);
var timer1 = setInterval(setTime1, 1000);
实际上我用的计时器是显示人们的等待时间。人数是一个未知变量。这意味着它可以从1到100。所以,一个人就是一个计时器。下面是我编写的函数

showWait = function(){
    var html = "";
    for (var i = 0; i < total; i++) 
    {                 
            html += '<div id="numbers" class="col-sm-3 col-xs-6">'+i+'</div>';
            html += '<div id="qtime" class="col-sm-3 col-xs-6"></span><div><span class="glyphicon glyphicon-time"></span> Waiting</div><div id="waittime"><label id="minutes'+i+'">00</label>:<label id="seconds'+i+'">00</label></div></div>';
            html += '</div>';
    }
$('#waitnumber').html(html);
}
showWait=function(){
var html=“”;
对于(变量i=0;i

所以,我不认为创建更多计时器的方法是不断重复相同的函数,对吗?不可能100个人就有100个计时器,对吧?有没有更简单的方法来管理多个计时器?

我想每个间隔都有
1000
ms的等待时间,所以你不需要多个计时器,只需要一个,在这个计时器中,你可以为每个人做你需要的事情

var sec = [time0, time1, time2 ....];
function pad ( val ) { return val > 9 ? val : "0" + val; }       
function setTime()
{
    for(person = 0; person < numberOfPeople; person++)
    {
        document.getElementById("seconds" + person).innerHTML=pad(++sec[person]%60);
        document.getElementById("minutes" + person).innerHTML=pad(parseInt(sec[person]/60,10));
    }
}
var timer = setInterval(setTime, 1000);
var sec=[time0,time1,time2..];
功能板(val){返回val>9?val:“0”+val;}
函数setTime()
{
for(person=0;person
我想每个时间间隔都有
1000
ms的等待时间,所以你不需要多个计时器,只需要一个计时器,在这个计时器中,为每个人做你需要的事情

var sec = [time0, time1, time2 ....];
function pad ( val ) { return val > 9 ? val : "0" + val; }       
function setTime()
{
    for(person = 0; person < numberOfPeople; person++)
    {
        document.getElementById("seconds" + person).innerHTML=pad(++sec[person]%60);
        document.getElementById("minutes" + person).innerHTML=pad(parseInt(sec[person]/60,10));
    }
}
var timer = setInterval(setTime, 1000);
var sec=[time0,time1,time2..];
功能板(val){返回val>9?val:“0”+val;}
函数setTime()
{
for(person=0;person
如果每个人的时间间隔都是固定的,那么我建议您只运行一个1000毫秒的计时器,并为每个人定义特定的变量,例如

var persons = [
    {id : 0, min : 0, sec : 0, othercounts: 0},
    {id : 1, min : 0, sec : 0, othercounts: 0}
]
在执行timer函数时,只需迭代数组或(您觉得合适的任何数据结构),为每个人增加时间计数器变量,并刷新dom

您的计时器功能如下所示:

function setTime(){
    persons.forEach(function(p){
    p.min ++; 
    // your logic
    document.getElementById("seconds"+ e.id).innerHTML=pad(++sec%60);
    document.getElementById("minutes" + e.id).innerHTML=pad(parseInt(sec/60,10));
    });
}
并仅注册一次间隔,即在文档加载事件或自定义事件上

var timer = setInterval(setTime, 1000);
当新的person到达时,只需将person对象推入persons数组


这只是一种方法,通过在循环结束时只呈现一次html,可以有更好的解决方案。

如果每个人的时间间隔是固定的,那么我建议您只运行一个1000毫秒的计时器,并为每个人定义特定的变量,比如这样的

var persons = [
    {id : 0, min : 0, sec : 0, othercounts: 0},
    {id : 1, min : 0, sec : 0, othercounts: 0}
]
在执行timer函数时,只需迭代数组或(您觉得合适的任何数据结构),为每个人增加时间计数器变量,并刷新dom

您的计时器功能如下所示:

function setTime(){
    persons.forEach(function(p){
    p.min ++; 
    // your logic
    document.getElementById("seconds"+ e.id).innerHTML=pad(++sec%60);
    document.getElementById("minutes" + e.id).innerHTML=pad(parseInt(sec/60,10));
    });
}
并仅注册一次间隔,即在文档加载事件或自定义事件上

var timer = setInterval(setTime, 1000);
当新的person到达时,只需将person对象推入persons数组


这只是一种方法,通过在循环结束时只渲染一次html,可以有更好的解决方案。

mplungjan,他知道如何制作多个计时器,已经做过了,如果你没有注意到,他的问题是如何使它更简单——实际上有成百上千个OO计时器。选择一个经过良好测试的,而不是自己制作的,除非是出于教育目的,这仍然意味着看一个精心制作的OnePlungjan,他知道如何制作多个计时器,他已经做了,如果你没有注意到,他的问题是如何使它更简单——实际上有成百上千个OO计时器。选择一个经过良好测试的,而不是你自己做的,除非是为了教育目的,这仍然意味着看一个构造良好的,这是一个很好的答案。。。但是计时器都是同时启动的,对吗?如果我想让计时器在不同的时间启动怎么办?interval将仅对低于numberOfPeople的人执行您的函数,因此对于数字高于该数字的人,将在下一秒开始计数,您将增加numberOfPeople。如果你想要更复杂的管理,那么对你来说将是另一个正确的逻辑这是一个很好的答案。。。但是计时器都是同时启动的,对吗?如果我想让计时器在不同的时间启动怎么办?interval将仅对低于numberOfPeople的人执行您的函数,因此对于数字高于该数字的人,将在下一秒开始计数,您将增加numberOfPeople。如果您想要更复杂的管理,那么将是另一个适合您的逻辑setInterval函数如何?您没有提到这个问题,先生。您可以在文档加载时注册一个间隔,或者根据您的逻辑启动计时器。setInterval函数将具有forEach循环,如果循环为空,则不会发生任何事情,否则它将被迭代,更改变量并更新dom。让我更新我的答案setInterval函数怎么样?您没有提到这个问题,先生。您可以在文档加载时注册一个间隔,或者根据您的逻辑启动计时器。setInterval函数将具有forEach循环,如果循环为空,则不会发生任何事情,否则它将被迭代,更改变量并更新dom。让我更新我的答案