2016-06-28 66 views
0

我在我的網站有兩個倒計時器。一個計時器會自動啓動,但下一個只能在第一個完成後才啓動。這應該永遠循環,即一個接一個地開始。開始1個定時器時鐘後,使用JavaScript循環它

這裏是我試過的代碼:

function count() { 
    var startTime = document.getElementById('hms').innerHTML; 
    var pieces = startTime.split(":"); 
    var time = new Date(); 
    time.setHours(pieces[0]); 
    time.setMinutes(pieces[1]); 
    time.setSeconds(pieces[2]); 
    var timedif = new Date(time.valueOf() - 1000); 
    var newtime = timedif.toTimeString().split(" ")[0]; 
    document.getElementById('hms').innerHTML = newtime; 
    if (newtime !== '00:00:00') { 
     setTimeout(count, 1000); 
    } else { 
     count1(); 
    } 

} 

count(); 

function count1() { 
    var startTime = document.getElementById('hms1').innerHTML; 
    var pieces = startTime.split(":"); 
    var time = new Date(); 
    time.setHours(); 
    time.setMinutes(pieces[1]); 
    time.setSeconds(pieces[2]); 
    var timedif = new Date(time.valueOf() - 1000); 
    var newtime = timedif.toTimeString().split(" ")[0]; 
    document.getElementById('hms1').innerHTML = newtime; 
    if (newtime !== '00:00:00') { 
     setTimeout(count, 1000); 
    } else { 
     count(); 
    } 

} 

HTML:

<div id="hms">00:00:10</div> 


<div id="hms1">00:02:10</div> 

我無法使這項工作。幫幫我!!

+0

document.getElementById('hms')。innerHTML,它是如何工作的。添加html代碼 –

+0

也是一個不同的方法來處理這個事件:https://jsfiddle.net/3qrrduqw/ – Thomas

回答

0

您當前的代碼幾乎沒有 - 一個幾個小問題:

  1. time.setHours缺少參數上線23,應如下所示:

    var time = new Date(); time.setHours(pieces[0]);

  2. 線30應該調用備用功能:

    setTimeout(count1, 1000);

  3. 只能有一個計數器應在運行時間,所以不需要在最後一行(count1())。

這裏是updated JSBin

然而,這裏DRY解決方案會更合適,以避免管理兩個功能:

var currentTimer = 'hms'; 
var alternateTimer = 'hms1'; 

function count() { 
    var timer = document.getElementById(currentTimer); 

    var startTime = timer.innerHTML; 
    var pieces = startTime.split(':'); 
    var time = new Date(); 

    time.setHours(pieces[0]); 
    time.setMinutes(pieces[1]); 
    time.setSeconds(pieces[2]); 

    var timedif = new Date(time.valueOf() - 1000); 
    var newtime = timedif.toTimeString().split(' ')[0]; 

    // Update DOM 
    timer.innerHTML = newtime; 

    if(newtime === '00:00:00') { 
    // Swap the two timers 
    currentTimer = [alternateTimer, alternateTimer = currentTimer][0]; 
    } 

    setTimeout(count, 1000); 
} 

count(); 

希望幫助!

+0

你如何使初始時間不變。導致當前代碼從00:00:00開始,而不是初始時間。 – qwerty

+0

您可以隨時在代碼中存儲初始時間:並在交換兩個定時器時將定時器還原到該時間。添加爲第1行:'var initialTime = '00:00:10';'交換定時器時添加:'document.getElementById(alternateTimer).innerHTML = initialTime' –

0

count應該啓動一個超時運行count1,並反過來:

initial_count = 5; // say 5 sec. count-down 
initial_count1 = 7; 
ic = initial_count; 
function count() { 
    ic-- 
    if (ic>=0) 
    setTimeout(count, 1000); // refresh every 1sec. 
    else { 
    ic = initial_count1; 
    count1(); 
    } 
} 

function count1() { 
    ic-- 
    if (ic>=0) 
    setTimeout(count1, 1000); // refresh every 1sec. 
    else { 
    ic = initial_count; 
    count(); 
    } 
} 

count(); // start the first alarm. 

添加您的邏輯的所有剩餘...

+0

在計數終止後,這並沒有啓動count1。 – qwerty

+0

我知道您希望兩次倒計時,刷新率在一定程度上更新。需要一些編輯。 –

+0

只是爲了讓事情更清楚。一旦時鐘1達到00:00:00,時鐘2(count1)應該開始。這就是我使用if語句的原因,但我無法解決這個問題。希望這能讓我的情況清楚。 – qwerty

0
function count() { 
    var startTime = document.getElementById('hms').innerHTML; 
    var pieces = startTime.split(":"); 
    var time = new Date(); time.setHours(pieces[0]); 
    time.setMinutes(pieces[1]); 
    time.setSeconds(pieces[2]); 
    var timedif = new Date(time.valueOf() - 1000); 
    var newtime = timedif.toTimeString().split(" ")[0]; 
    document.getElementById('hms').innerHTML=newtime; 
    if(newtime!=='00:00:00'){ 
    setTimeout(count, 1000); 
    }else 
    { 
    count1(); 
    } 

} 

count(); 


function count1() { 
    var startTime = document.getElementById('hms1').innerHTML; 
    var pieces = startTime.split(":"); 
    var time = new Date(); time.setHours(); 
    time.setMinutes(pieces[1]); 
    time.setSeconds(pieces[2]); 
    var timedif = new Date(time.valueOf() - 1000); 
    var newtime = timedif.toTimeString().split(" ")[0]; 
    document.getElementById('hms1').innerHTML=newtime; 
    if(newtime!=='00:00:00' && newtime!=='00:00:01'){ 
     setTimeout(count, 1000); 
    }else 
    { 
     count(); 
    } 

    } 

count1(); 
相關問題