2013-07-07 4 views
0

J'utilise le code suivant pour créer un compte à rebours sur ma page et cela fonctionne très bien, sauf que toutes les informations de date sont codées en dur dans le "getSeconds" fonction et je voulais faire en sorte que je pourrais avoir plusieurs comptes à rebours sur la même page que je devine signifie que la fonction "getSeconds" devra être changé pour accepter les paramètres, mais je ne suis pas sûr de savoir comment faire cela et pensé demander aux experts ici pour leur aide.Modification d'une fonction pour utiliser des paramètres au lieu de valeurs codées en dur

<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

pouvez-vous réduire le code au montant minimum possible où nous pouvons toujours voir le problème? –

+0

changé pour montrer seulement la fonction en question – avue

+0

@JustinL .: Il n'y a pas de problème, il veut juste savoir ce qu'il doit changer. Et pour cela nous avons besoin du code entier, car il n'inclut pas seulement 'getSeconds'. – Bergi

Répondre

0

Très simple. Un exemple:

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

Il suffit de modifier ces informations de dates pour ces variables. Lorsque vous voulez appeler votre fonction, utilisez-la avec les arguments que vous avez précédemment écrits.

Edit:

Vous pourriez faire quelque chose comme ça, en passant chaque paramètre séparément:

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); 
} 

Vous pouvez également passer un argument d'objet, quelque chose comme:

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

Je comprendrais que si chaque variable avait seulement une valeur, mais si vous regardez la variable countdowntime, elle contient un tableau, alors comment le ferais-je en utilisant votre exemple. Je suppose que je ne vous suis pas malgré la simplicité de votre apparition. – avue

+0

J'ai édité ma réponse. Si vous souhaitez mettre plusieurs comptes à rebours sur la page Web, appelez simplement votre fonction en passant ces paramètres multiples. Dans ce cas, lorsque vous disposez de plusieurs fonctions, vous pouvez effectuer le même processus, ou les réécrire en passant des paramètres les uns aux autres, de cette façon vous devez entrer les paramètres dans une seule fonction. –

+0

Merci, peut-être que quelqu'un d'autre peut s'en servir. Je ne peux toujours pas le suivre cependant. J'ai voté pour cela puisque vous avez passé du temps à le coder et à le modifier. – avue

0

Ci-dessous est un exemple de passage de l'année, du mois et de la date en paramètre, et utilisé pour votre compte à rebours. Lorsque vous appelez la fonction getSeconds, passe juste à 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

Cela ne permet pas plusieurs comptes à rebours possibles. – Bergi

+0

Devrait passer un objet à la place. 1 param, complètement extensible au fil du temps. –

+0

@CalebC Cela ne tient compte que d'une partie du problème, comme Bergi l'a souligné, mais je dois quand même tenir compte des heures, des minutes, des secondes et des variables du jour de la semaine. – avue

0

Il ressemble à la countdowntime variables est celui que vous auriez besoin de passer en argument à la fonction getSeconds() afin d'avoir plusieurs comptes à rebours. Vous juste besoin de changer votre définition de la fonction de prendre dans cet objet Date comme paramètre, comme ceci:

function getSeconds(countdowntime){ 

et commentez la ligne déclarant actuellement l'objet countdowntime. Autre chose que j'ai remarqué, cependant, c'est que vous utilisiez des variables globales pour partager des données entre les fonctions. C'est quelque chose que vous devrez peut-être envisager de retravailler puisque maintenant il y aura plusieurs minuteurs.

+0

Il ne doit pas seulement * regarder * cela, il * doit * les corriger pour permettre plusieurs comptes à rebours. – Bergi

+0

Merci, c'est exactement ce que je voulais dire :) –

+0

Merci pour l'aide à tous. Je suppose que je suis au-dessus de ma tête ici puisque ce n'est pas mon script et j'ai des connaissances très limitées en JS et il semble que j'ai ouvert un peut un vers avec cette question. Je suppose que je vais juste devoir trouver une solution pré-faite que je peux utiliser. S'il vous plaît, votez pour la solution qui répond le mieux à la question, car je ne peux pas faire travailler l'un d'entre eux selon mes besoins. – avue

Questions connexes