2013-07-07 81 views
0

我正在使用下面的一段代碼在我的頁面上創建一個倒數計時器,它非常適用於所有日期信息硬編碼到「getSeconds」功能,我想這樣做,所以我可以在同一頁面上多次倒計時,我猜測意味着「getSeconds」函數將不得不被改爲接受參數,但我不太確定如何做到這一點,並認爲我會問這裏的專家他們的幫助。更改函數以使用參數而不是硬編碼值

<html> 
    <head> 

    <script type = "text/javascript"> 

var cday; 
var timeInSecs; 
var ticker; 

function getSeconds() { 
    var now = new Date(); 
    var nowtime = now.getTime(); // time now in milliseconds 
    var countdowntime = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0); // 16 hrs = 4 pm 
    // countdowntime - change time hh,mm,ss to whatever time required, e.g. 7,50,0 (0750) 
    var dy = 0; // Friday (day 5) - change for other days 0-6 
    var atime = countdowntime.getTime(); 
    var diff = parseInt((atime - nowtime)/1000); // positive if date is in future 
    if (diff > 0) { 
     cday = dy - now.getDay(); 
    } else { 
     cday = dy - now.getDay() - 1; 
    } 
    if (cday < 0) { 
     cday += 7; 
    } // aleady passed countdown time, so go for next week 
    if (diff <= 0) { 
     diff += (86400 * 7) 
    } 
    startTimer(diff); 
} 

function startTimer(secs) { 
    timeInSecs = parseInt(secs); 
    ticker = setInterval("tick()", 1000); 
    tick(); // to start counter display right away 
} 

function tick() { 
    var secs = timeInSecs; 
    if (secs > 0) { 
     timeInSecs--; 
    } else { 
     clearInterval(ticker); // stop counting at zero 
     getSeconds(); // and start all over again! 
    } 
    var days = Math.floor(secs/86400); 
    secs %= 86400; 
    var hours = Math.floor(secs/3600); 
    secs %= 3600; 
    var mins = Math.floor(secs/60); 
    secs %= 60; 
    var result = "Time remaining " + cday + ' day(s) '; 
    result += ((hours < 10) ? "0" : "") + hours + " hours " + ((mins < 10) ? "0" : "") + mins + " minutes " + ((secs < 10) ? "0" : "") + secs + " seconds"; 
    document.getElementById("countdown").innerHTML = result; 
} 
    </script> 
    </head> 

    <body onload = "getSeconds()"> 
    <span id="countdown" style="font-size: 20; font-weight:bold;"> </span> 
    </body> 
</html> 
+0

您是否可以將代碼減少到可能的最小數量,我們仍然可以看到該問題? –

+0

更改爲只顯示有問題的功能 – avue

+0

@JustinL .:沒有問題,他只是想知道他需要改變什麼。爲此,我們需要整個代碼,因爲它不僅包含'getSeconds'。 – Bergi

回答

0

很簡單。一個例子:

function myFunction(var1,var2) { 
//some code 
} 

所以簡單地改變那些變量的日期信息。 當你想調用你的函數時,將它與你以前編寫的參數一起使用。

編輯:

你可以做這樣的事情,分別傳遞每個參數:

function getSeconds(hours, minutes, seconds, daycode) { 
    var now = new Date(); 
    var nowtime = now.getTime(); // time now in milliseconds 
    var countdowntime = new Date(now.getFullYear(), now.getMonth(), now.getDate(), hours, minutes, seconds); // 16 hrs = 4 pm 
    // countdowntime - change time hh,mm,ss to whatever time required, e.g. 7,50,0 (0750) 
    var dy = daycode; // Friday (day 5) - change for other days 0-6 
    var atime = countdowntime.getTime(); 
    var diff = parseInt((atime - nowtime)/1000); // positive if date is in future 
    if (diff > 0) { 
     cday = dy - now.getDay(); 
    } else { 
     cday = dy - now.getDay() - 1; 
    } 
    if (cday < 0) { 
     cday += 7; 
    } // aleady passed countdown time, so go for next week 
    if (diff <= 0) { 
     diff += (86400 * 7) 
    } 
    startTimer(diff); 
} 

你也可以傳遞一個對象的說法,是這樣的:

countdown = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0); // 16 hrs = 4 pm 

function getSeconds(countdown, daycode) { 
    var now = new Date(); 
    var nowtime = now.getTime(); // time now in milliseconds 
    var countdowntime = countdown 
    ... 
+0

我會明白,如果每個變量只有一個值,但如果你看看countdowntime變量它包含一個數組,那麼我將如何使用你的例子。儘管你看起來有多簡單,但我猜你並不追隨你。 – avue

+0

我編輯了我的答案。 如果您想在網頁上進行多次倒計時,只需調用傳遞這些倍數參數的函數即可。 在這種情況下,如果您有幾個函數,您可以使用相同的過程,或者重寫它們將參數從一個傳遞到另一個,這樣您只需要在一個函數中輸入參數。 – 2013-07-08 00:16:59

+0

謝謝,也許別人可以利用它。但我仍然無法遵循它。我投了贊成票,因爲你真的花時間編碼並編輯它。 – avue

0

以下是將年份,月份和日期作爲參數傳遞並用於倒計時的示例。當調用getSeconds功能,只需通過在getSeconds(2013,7,8)

function getSeconds(varYear, varMonth, varDate) { 
    var now = new Date(); 
    var nowtime = now.getTime(); // time now in milliseconds 
    var countdowntime = new Date(varYear, varMonth, varDate, 0, 0, 0); // 16 hrs = 4 pm 
    // countdowntime - change time hh,mm,ss to whatever time required, e.g. 7,50,0 (0750) 
    var dy = 0; // Friday (day 5) - change for other days 0-6 
    var atime = countdowntime.getTime(); 
    var diff = parseInt((atime - nowtime)/1000); // positive if date is in future 
    if (diff > 0) { 
     cday = dy - now.getDay(); 
    } else { 
     cday = dy - now.getDay() - 1; 
    } 
    if (cday < 0) { 
     cday += 7; 
    } // aleady passed countdown time, so go for next week 
    if (diff <= 0) { 
     diff += (86400 * 7) 
    } 
    startTimer(diff); 
    } 
+0

這不會使多次倒計數成爲可能。 – Bergi

+0

應該傳遞一個對象。 1參數,隨着時間的推移可完全擴展。 –

+0

@CalebC Bergi指出,這隻關注部分問題,我仍然需要考慮小時,分鐘,秒和星期幾變量。 – avue

0

它看起來像變量countdowntime是你需要的,以便有多個倒計時功能作爲參數傳遞給函數getSeconds()的一個。你只需要改變你的函數定義,將在Date對象作爲參數,如:

function getSeconds(countdowntime){ 

並註釋掉目前宣佈countdowntime對象行。然而,我注意到的其他事情是,您正在使用全局變量在函數之間共享數據。這是您可能需要查看重做的內容,因爲現在將會有多個定時器。

+0

他不僅*可能*需要看看,他*必須*修復那些允許多次倒計時。 – Bergi

+0

謝謝,這就是我的意思:) –

+0

感謝大家的幫助。我想我的頭在這裏,因爲這不是我的腳本,我對JS的知識非常有限,似乎我已經打開了一個可以解決這個問題的蠕蟲。我想我只需要找到一個我可以使用的預製解決方案。請加快解決問題的最佳答案,因爲我無法讓他們中的任何一個按我的需要工作。 – avue

相關問題