2017-08-12 2 views
2

Ich weiß nichts über JS, also bitte schneide mir etwas Durchhang. Ich verwende einen Countdown von der W3schools-Website. Das Problem ist, dass, obwohl ich die beiden Countdowns separate IDs gebe, scheint es, dass sie den gleichen Countdown laufen, anstatt getrennt zu sein. Beide scheinen sek-cd zu laufen.Mehrere Countdowns auf der gleichen Seite JS

Wie können diese beiden Countdowns getrennt arbeiten?

HTML

<div id="main"> 
    <h1><u><b>Countdown 1</b></u></h1> 
    <h1 id="main-cd"></h1> 
    <div class="secondary"> 
    <h1><u><b>Countdown 2</b></u></h1> 
    <h1 id="sec-cd"></h1> 
    </div> 

</div> 

JavaScript

var countDownDate = new Date("August 29, 2017 19:00:00 GMT").getTime(); 
var x = setInterval(function() { 

    var now = new Date().getTime(); 

    var distance = countDownDate - now; 

    var days = Math.floor(distance/(1000 * 60 * 60 * 24)); 
    var hours = Math.floor((distance % (1000 * 60 * 60 * 24))/(1000 * 60 * 60)); 
    var minutes = Math.floor((distance % (1000 * 60 * 60))/(1000 * 60)); 
    var seconds = Math.floor((distance % (1000 * 60))/1000); 

    document.getElementById("main-cd").innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s "; 

    if (distance < 0) { 
    clearInterval(x); 
    var ongoing = document.getElementById("main-cd").innerHTML = "Fin"; 
    } 

}, 1000); 

var countDownDate = new Date("August 28, 2017 19:00:00 GMT").getTime(); 

var x = setInterval(function() { 

    var now = new Date().getTime(); 

    var distance = countDownDate - now; 

    var days = Math.floor(distance/(1000 * 60 * 60 * 24)); 
    var hours = Math.floor((distance % (1000 * 60 * 60 * 24))/(1000 * 60 * 60)); 
    var minutes = Math.floor((distance % (1000 * 60 * 60))/(1000 * 60)); 
    var seconds = Math.floor((distance % (1000 * 60))/1000); 

    document.getElementById("sec-cd").innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s "; 

    if (distance < 0) { 
    clearInterval(x); 
    var ongoing = document.getElementById("sec-cd").innerHTML = "Fin"; 
    } 

}, 1000); 

JSFiddle-Link:https://jsfiddle.net/az0upkxu/

Antwort

2

Sie verwenden die countDownDate Variable zweimal. Erklären Sie es einfach wieder countDownDateTwo und ändern Sie auch distance zu countDownDateTwo - now und es funktioniert.

Seien Sie vorsichtig mit Variablennamen, deshalb ist Scope der Schlüssel.

2

Dies liegt daran, dass Sie dieselbe Variable überschrieben werden. Bitte verwenden Sie eine andere Variable.

var countDownDate = new Date("August 29, 2017 19:00:00 GMT").getTime(); 

var countDownDate_2 = new Date("August 28, 2017 19:00:00 GMT").getTime();// renmaed variable 

Verwenden Sie auch diese verschiedenen Variablennamen innerhalb des Codes mit diesen Parametern.

Der folgende Code funktioniert.

var countDownDate = new Date("August 29, 2017 19:00:00 GMT").getTime(); 
var x = setInterval(function() { 

    // Get todays date and time 
    var now = new Date().getTime(); 

    // Find the distance between now an the count down date 
    var distance = countDownDate - now; 

    // Time calculations for days, hours, minutes and seconds 
    var days = Math.floor(distance/(1000 * 60 * 60 * 24)); 
    var hours = Math.floor((distance % (1000 * 60 * 60 * 24))/(1000 * 60 * 60)); 
    var minutes = Math.floor((distance % (1000 * 60 * 60))/(1000 * 60)); 
    var seconds = Math.floor((distance % (1000 * 60))/1000); 

    // Output the result in an element with id="demo" 
    document.getElementById("main-cd").innerHTML = days + "d " + hours + "h " 
    + minutes + "m " + seconds + "s "; 

    // If the count down is over, write some text 
    if (distance < 0) { 
     clearInterval(x); 
     var ongoing =document.getElementById("main-cd").innerHTML = "Event Ongoing"; 
    } 

}, 1000); 
// Set the date we're counting down to 
var countDownDate_2 = new Date("August 28, 2017 19:00:00 GMT").getTime(); 

// Update the count down every 1 second 
var x = setInterval(function() { 

    // Get todays date and time 
    var now = new Date().getTime(); 

    // Find the distance between now an the count down date 
    var distance = countDownDate_2 - now; 

    // Time calculations for days, hours, minutes and seconds 
    var days = Math.floor(distance/(1000 * 60 * 60 * 24)); 
    var hours = Math.floor((distance % (1000 * 60 * 60 * 24))/(1000 * 60 * 60)); 
    var minutes = Math.floor((distance % (1000 * 60 * 60))/(1000 * 60)); 
    var seconds = Math.floor((distance % (1000 * 60))/1000); 

    // Output the result in an element with id="demo" 
    document.getElementById("sec-cd").innerHTML = days + "d " + hours + "h " 
    + minutes + "m " + seconds + "s "; 

    // If the count down is over, write some text 
    if (distance < 0) { 
     clearInterval(x); 
     var ongoing =document.getElementById("sec-cd").innerHTML = "Season has eneded!"; 
    } 

}, 1000); 
+0

Bitte markieren Sie es als eine Antwort, wenn es hilft. –

Verwandte Themen