Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Skrypt odliczający nie zmienia minut
Forum PHP.pl > Forum > Przedszkole
thomson89
Witam!

Znalazłem gdzieś kod odliczający czas. Niestety nie działa on poprawnie. Jeżeli powiedzmy zostało 00:02:01, to minuty się nie zmienią od razy, tylko będzie nadal 00:02:59 i dopiero gdy będzie 00:02:30 to zegar zmieni się na 00:01:29 - czyli tak jak powinno być. Jeżeli nie wiecie o co chodzi to skopiujcie sobie to poniżej i zaobserwujcie gdy jest właśnie xx:xx:01

Proszę o pomoc, jak to naprawić!

Pozdrawiam, Mateusz!

  1. <!DOCTYPE html>
  2. <head lang="pl">
  3. <meta charset="utf-8">
  4. <title>Jak zrobic odliczanie czasu w JS i trigger ? (4 programmers.net)</title>
  5. </style>
  6. </head>
  7. <h1>Odliczanie czasu</h1>
  8. <p>Licznik pierwszy: <strong id="counter1"></strong></p>
  9. <p>Licznik drugi: <strong id="counter2"></strong></p>
  10. <p>Licznik trzeci: <strong id="counter3"></strong></p>
  11. <p>Licznik czwarty &ndash; Odliczanie do alerta: <strong id="counter_alert"></strong></p>
  12.  
  13. /**
  14. * Wyświetla zegar odliczający godziny, minuty i sekundy od daty (chwili)
  15. * bieżącej do daty docelowej.
  16. *
  17. * Po osiągnięciu daty docelowej zegar pokazuje zero.
  18. *
  19. * @param targetDate {Date} Data docelowa, reprezentująca chwilę czasu "0"
  20. * @param displayElement {HTMLElement} Element, w którym będzie wyświetlane odliczanie
  21. * @param onCountdownFinish {function} (Parametr opcjonalny) Funkcja, która zostanie
  22. * wywołana gdy odliczanie się skończy. Jeśli
  23. * jako data docelowa będzie podana chwila z przeszłości,
  24. * to funkcja ta będzie wywołana od razu.
  25. *
  26. */
  27. function countdown(targetDate, displayElement, onCountdownFinish /* = null*/) {
  28. if (!(targetDate && displayElement)) {
  29. return;
  30. }
  31. var formatTimeInterval = function(seconds) {
  32. var hrs = Math.round(seconds / 3600)
  33. var min = Math.round(seconds / 60) % 60;
  34. var sec = seconds % 60;
  35. return (hrs + ':' + min + ':' + sec).replace(/(^|:)(\d)(?=:|$)/g, '$10$2');
  36. };
  37. var refreshTimer = function() {
  38. var now = new Date();
  39. var diffMilliseconds = targetDate.getTime() - now.getTime();
  40. var diffSeconds = Math.round(diffMilliseconds / 1000);
  41. if (diffSeconds < 0) {
  42. diffSeconds = 0;
  43. }
  44. var countdownHTML = formatTimeInterval(diffSeconds)
  45. if (countdownHTML != displayElement.innerHTML) {
  46. displayElement.innerHTML = countdownHTML;
  47. }
  48. if (diffSeconds === 0) {
  49. clearInterval(intervalId);
  50. if (typeof onCountdownFinish === 'function') {
  51. onCountdownFinish(targetDate);
  52. }
  53. }
  54. };
  55. var intervalId = setInterval(refreshTimer, 10);
  56. refreshTimer();
  57. }
  58.  
  59. // Właściwa inicjalizacja zegarów:
  60. (function() {
  61. var now = new Date();
  62.  
  63. // data docelowa: 3 marca 2010, godz. 20:48:10 (miesiące liczymy od zera, a dni od jeden... lol)
  64. countdown(new Date(2010, 11, 5, 18, 0, 0, 0), document.getElementById('counter1'));
  65.  
  66. // data docelowa: teraz plus 2 h 12 min 41 sek
  67. countdown(new Date(now.getTime() + (2 * 3600 + 12 * 60 + 41) * 1000), document.getElementById('counter2'));
  68.  
  69. // data docelowa: teraz plus 1 min 3 sek
  70. countdown(new Date(now.getTime() + (1 * 60 + 3) * 1000), document.getElementById('counter3'));
  71.  
  72. // data docelowa: teraz + 5 sek
  73. countdown(new Date(now.getTime() + 10 * 1000),
  74. document.getElementById('counter_alert'),
  75. function() {
  76. alert('Licznik czwarty: czas minął!');
  77. }
  78. );
  79. })();
  80.  
  81. // Więcej o tworzeniu dat:
  82. // <a href="http://www.w3schools.com/jsref/jsref_obj_date.asp" target="_blank">http://www.w3schools.com/jsref/jsref_obj_date.asp</a>
  83. // Zauważ, że można przekazać konstruktorowi Date czas w milisekundach,
  84. // co bardzo łatwo przerobić na unixowy czas podawany w sekundach.
  85. </script>
  86. </body>
  87. </html>
blade-mrn
Powiem szczerze że nie chciało mi się analizować twojego kodu ale jeśli chodzi ci o odliczanie czasu to ja kiedyś zrobiłem to tak:
[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. <!--
  3. var c; //zmienna przechowująca wartość początkową czasu
  4. var t;
  5. var timer_is_on=0;
  6. function timedCount()
  7. {
  8. if (c>0)
  9. {
  10. godz = Math.floor(c/60/60);
  11. if (godz < 10) {godz = "0"+godz}
  12. min = Math.floor(c/60)-godz*60;
  13. if (min < 10) {min = "0"+min;}
  14. sek = c % 60;
  15. if (sek < 10) {sek = "0"+sek;}
  16. document.getElementById('txt').innerHTML=godz+" h "+min+" min "+sek+" sek";
  17. c=c-1;
  18. t=setTimeout("timedCount()",1000);
  19. }
  20. if (c==0)
  21. {
  22. document.getElementById('txt').innerHTML="czas upłynął";
  23. }
  24. }
  25. //-->
  26. </script>
[JAVASCRIPT] pobierz, plaintext

Może to cię naprowadzi na rozwiązanie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.