2014-11-28 13 views
7

Próbuję stworzyć oparty na czasie zegar odliczający. Nie opiera się na current_dates. Początkowy czas, który zostanie pobrany, będzie pochodził z oddzielnego pliku php. Będzie to dotyczyć gry opartej na przeglądarce. Kiedy ktoś kliknie przycisk, aby zainicjować ten skrypt. sprawdzi, czy spełnione są pewne wymagania, a jeśli tak, to zainicjuje ten skrypt. Na podstawie poziomu obiektu będzie pobierał początkowy timer dla tego poziomu postępowania. Mam nadzieję, że ma to sens. W każdym razie oparłem skrypt timera na pierwszym dostarczonym przeze mnie kodzie.Executacript Minutnik w dniach, godzinach, minutach, sekundach

Ten skrypt uwzględnia tylko minuty i sekundy. Zmodyfikowałem go tak, aby obejmował również dni i godziny. Gdzieś w tym procesie zawiodłem, a scenariusz w ogóle nie działa. Nie jestem też całkiem pewien, czy byłaby to najlepsza metoda do obliczenia tego. Tak więc, jeśli masz do tego czystszą metodę, udostępnij. Z góry dziękuję.

Ten skrypt jest oparty na skrypcie minut/sekund, który widziałem. Oto oryginalne źródło:

<span id="countdown" class="timer"></span> 
<script> 
    var seconds = 60; 
    function secondPassed() { 
    var minutes = Math.round((seconds - 30)/60); 
    var remainingSeconds = seconds % 60; 
    if (remainingSeconds < 10) { 
     remainingSeconds = "0" + remainingSeconds; 
    } 
    document.getElementById('countdown').innerHTML = minutes + ":" + remainingSeconds; 
    if (seconds == 0) { 
    clearInterval(countdownTimer); 
    document.getElementById('countdown').innerHTML = "Buzz Buzz"; 
    } else { 
    seconds--; 
    } 
    } 
    var countdownTimer = setInterval('secondPassed()', 1000); 
</script> 

Oto zmodyfikowany skrypt, który próbuję uwzględnić w dniach, godzinach, minutach i sekundach.

<span id="countdown"></span> 
<script> 
    var current_level = 93578; 

    function timer() { 

     var days = Math.round(current_level/86400); 
     var remainingDays = Math.round(current_level - (days * 86400)); 

     if (days <= 0){ 
      days = current_level; 
     } 

     var hours = Math.round(remainingDays/3600); 
     var remainingHours = Math.round(remainingDays - (hours * 3600)); 

     if (hours >= 24){ 
      hours = 23; 
     } 

     var minutes = Math.round(remainingHours/60); 
     var remainingMinutes = Math.round(remainingHours - (minutes * 60)); 

     if (minutes >= 60) { 
      minutes = 59; 
     } 

     var seconds = Math.round(remainingMinutes/60); 

     document.getElementById('countdown').innerHTML = days + ":" + hours ":" + minutes + ":" + seconds; 

     if (seconds == 0) { 
      clearInterval(countdownTimer); 
      document.getElementById('countdown').innerHTML = "Completed"; 
     } 
    } 
    var countdownTimer = setInterval('timer()', 1000); 
</script> 

Odpowiedz

13

I wreszcie wróciłam do patrzenia na to i ponownie napisał kod i to działa jak czar.

<span id="countdown" class="timer"></span> 
<script> 
var upgradeTime = 172801; 
var seconds = upgradeTime; 
function timer() { 
    var days  = Math.floor(seconds/24/60/60); 
    var hoursLeft = Math.floor((seconds) - (days*86400)); 
    var hours  = Math.floor(hoursLeft/3600); 
    var minutesLeft = Math.floor((hoursLeft) - (hours*3600)); 
    var minutes  = Math.floor(minutesLeft/60); 
    var remainingSeconds = seconds % 60; 
    if (remainingSeconds < 10) { 
     remainingSeconds = "0" + remainingSeconds; 
    } 
    document.getElementById('countdown').innerHTML = days + ":" + hours + ":" + minutes + ":" + remainingSeconds; 
    if (seconds == 0) { 
     clearInterval(countdownTimer); 
     document.getElementById('countdown').innerHTML = "Completed"; 
    } else { 
     seconds--; 
    } 
} 
var countdownTimer = setInterval('timer()', 1000); 
</script> 
+2

. Z javascriptem zdecydowanie lepiej jest publikować działające wersje demonstracyjne. –

2

Możesz użyć tego js do wydajnego zarządzania czasem.

http://countdownjs.org/

+0

jakiś pomysł jak go używać? (+1 za udostępnienie dobrego zasobu) – HungryDB

+0

Dokumentacja tam jest. Przejść przez to. – Dhruv

+0

Nie szukam timerów odliczających datę bieżącą/przyszłą. Liczniki będą oparte na tym, co odczytuje z pliku. Za każdym razem, gdy ktoś kliknie przycisk "uaktualnienia", sprawdzi, czy gracz ma odpowiednie zasoby, bierze je, a następnie sprawdza aktualny poziom budynków i wyciąga zegar potrzebny na następny poziom. Po odliczeniu do 0, resetuje przycisk aktualizacji, aby gracz mógł dokonać aktualizacji. Ten dokument zdaje się robić to, co robią inni i opiera się na wprowadzeniu przyszłej daty. –

1

Osobiście używam jQuery integrację timera odliczania. Jest prosty i ma wiele opcji do wyświetlenia w różnych formatach. Ponieważ jestem całkiem nowym użytkownikiem JS, był to najłatwiejszy sposób, w jaki znalazłem licznik/timer.

http://keith-wood.name/countdown.html

+1

Tak ... dobry alternacyjny – Dhruv

+0

Ten fragment kodu jest przeznaczony tylko dla ciągnięcia dat, a nie ustawionych zmiennych wyświetlanych w oryginalnym kodzie źródłowym w sekundach iw zmodyfikowanej wersji jako current_level –

0
<span id="date_regist"></span> 
<script type="text/javascript"> 
    <script src="http://rc.sefunsoed.org/assets/js/countdown/jquery.countdown.min.js"></script> 
    var s = '2017/03/01 15:21:21'; 
     f = '2017/03/01 15:22:00'; 
format = '%-w <sup>week%!w</sup> ' + '%-d <sup>day%!d</sup> ' + '%H <sup>hr</sup> ' + '%M <sup>min</sup> ' + '%S <sup>sec</sup>'; 



    jQuery('#date_regist').countdown(s) 
     .on('update.countdown', function(event) { 

    jQuery(this).html("<b>will be open </b>" + event.strftime(format)); 
    }) 
    .on('finish.countdown', function(event) { 
    jQuery("#date_regist").remove() 
    jQuery("body").append('<span id="date_regist"></span>') 
    jQuery("#date_regist").countdown(f) 
     .on('update.countdown', function(event) { 

     jQuery(this).html("<b> is open for </b>" + event.strftime(format)); 
     }) 
     .on('finish.countdown', function(event) { 
     jQuery('#rework').hide(); 
     //jQuery(this).html("<b> is closed.</b>"); 
     }); 
    }); 
</script> 
+0

Zrzuty kodów, chociaż mogą naprawić problem, nie są całkowicie przydatne. Czy możesz wyjaśnić swój kod i dlaczego to pomaga OP. Wyjaśniając kod, pomagasz zarówno OP, jak i przyszłym odwiedzającym. – Bugs

0

Oto moja wypracowane i przetestowane przykład, na podstawie kodu

<span id="countdown"></span> 
<script> 
    var current_level = 3002; 

    function timer() { 

     var days = Math.floor(current_level/86400); 
     var remainingDays = current_level - (days * 86400); 

     //if (days <= 0){ 
     // days = current_level; 
     //} 

     var hours = Math.floor(remainingDays/3600); 
     var remainingHours = remainingDays - (hours * 3600); 

     //if (hours >= 24){ 
     //  hours = 23; 
     //} 

     var minutes = Math.floor(remainingHours/60); 
     var remainingMinutes = remainingHours - (minutes * 60); 

     //if (minutes >= 60) { 
     //  minutes = 59; 
     //} 

     var seconds = remainingMinutes; 

     document.getElementById('countdown').innerHTML = days + ":" + hours + ":" + minutes + ":" + seconds; 

     //if (seconds == 0) { 
     // clearInterval(countdownTimer); 
     //  document.getElementById('countdown').innerHTML = "Completed"; 
     //} 

     current_level--; 
    } 
    var countdownTimer = setInterval(timer, 1000); 
</script> 
+0

Czy jest potrzeba opublikowania odpowiedzi na trzyletnie pytanie, które już zawiera akceptowaną odpowiedź? –

Powiązane problemy