Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Countdown
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Snoopy
Potrzebuję prosty skrypt odliczający czas od jakiejś wartości do zera.

powinien wyglądać tak:
-przez jakis skrypt php wysyłam wartość w sekundach do skryptu JS
-w js, sekundy są zliczane na minuty, godziny - dni i wyższe wartości są niepotrzebne, moze sie przytrafić ze bedzie np. 115 godzin
-nastepnie co sekundę licznik powinien być odswierzany i pomniejszany o 1 sek
-gdy dojdzie do zera powinien pojawic się takiś tekst zamiast licznika albo jakieś zdarzenie (obstaję przy tekscie)

I tu prośba do forumowiczów. Nie znam się na JS więc chciałbym aby ktoś napisał taki banalny kodzik. Byłbym wdzięczy zwłaszcza że wszystkie countdowny na necie są albo za bardzo rozbudowane, albo trudne do rozgryzienia. A mi chodzi o takie proste liczydło.
revyag
Najprościej jak się da smile.gif
Kod
<script type="text/javascript">

var hours = 20;
var min = 0;
var sec=0;

function time() {
    if(sec > 0) {
        sec--;
    } else if(min > 0) {
        min--;
        sec = 59;
    } else if(hours > 0) {
        hours--;
        min = 59;
        sec=59;
    }

    if(hours ==0 && min==0 && sec==0) {
        alert("End of time....");
    }
    
    document.getElementById('tm').innerHTML=
    hours+":"+((min < 10) ? "0" + min : min)+":"+((sec < 10) ? "0" + sec : sec);
    
    setTimeout("time();", 1000);
}
</script>


  1. <body onload="time()">
  2. <span id="tm"></span>
  3. </body>
Snoopy
mój błąd... nieco modyfikacji powinno tam się znaleźć

- nie chodzi mi o wyświetlenie okienka alert tylko żeby w miejscu gdzie jest 'czas' pojawił się tekst np: kaboom!

ale skrypt jest zajebisty...

aha jak zrobić żeby przy pomocy tego skryptu wyświetlić kilka razy w różnych miejscach strony ten czas ale z innymi wartościami...

np.
00:12:59
w stopce: 24:00:01
gdzieś w tekście: 00:00:53
i żeby każdy działał.

juz wiem ze skopiowanie:
<span id="tm"></span>

nic nie daje biggrin.gif
revyag
Kod
<script type="text/javascript">

var IdNo = 0;

function time (hours,mins,secs,span) {
    
    this.id = "time" + IdNo++;
    window[this.id] = this;
    
    this.hours = hours;
    this.mins = mins;
    this.secs = secs;
    this.span = span;
    
    this.show = show;
    
}

function show() {
    
    if( this.secs > 0 ) {
        this.secs--;
    } else if( this.secs == 0 && this.mins > 0 ) {
        this.mins--;
        this.secs=59;
    } else if ( this.secs == 0 && this.mins == 0 && this.hours > 0 ) {
        this.hours--;
        this.mins=59;
        this.secs=59;
    }
    if( this.hours == 0 && this.mins == 0 && this.secs == 0 ) {
        alert("Koniec czasu");
    } else {
        
        document.getElementById( this.span ).innerHTML = "Time left: " +
        (( this.hours < 10 ) ? ( "0" + this.hours ) : this.hours) + ":" +
        (( this.mins < 10 ) ? ( "0" + this.mins ) : this.mins) + ":" +
        (( this.secs < 10 ) ? ( "0" + this.secs ) : this.secs);
        
    }
    setTimeout("window."+this.id+".show()",1000);
}


function load() {
    
    var timer = new time(20,0,0,"tm");
    var timer1 = new time(14,35,45,"tm1");
    var timer2 = new time(0,10,2,"tm2");
    
    timer.show();
    timer1.show();
    timer2.show();
}
</script>

  1. <body onload="load()">
  2. <span id="tm"></span><br /><br />
  3. <span id="tm1"></span><br /><br />
  4. <span id="tm2"></span>
  5. </body>

Nie wiedziałem dlaczego timer nie zmniejsza mi się więc pogoglowałem smile.gif

Pomysł z zachowaniem referencji do obiektu jest stąd:
http://www.codingforums.com/showthread.php?t=242
Snoopy
juz na innym forum mi ludzie pomogli:

Kod
var hours = 0;
var min = 0;
var sec = 5;

function time() {
   if(sec > 0) {
       sec--;
   } else if(min > 0) {
       min--;
       sec = 59;
   } else if(hours > 0) {
       hours--;
       min = 59;
       sec=59;
   }

   if(hours==0 && min==0 && sec==0) {
document.getElementById('tm').innerHTML="-";
   } else {
  
   document.getElementById('tm').innerHTML=
   hours+":"+((min < 10) ? "0" + min : min)+":"+((sec < 10) ? "0" + sec : sec);
   }
   setTimeout("time();", 1000);
}


__
Kod
body onload="time()">
<script src='script.js' type='text/javascript'></script>

<span id="tm"></span>

</body>



mozna prościej? hę? Rkingsmiley.png
revyag
Jakoś nie widzę żeby ten skrypt wyświetlał czas w trzech miejscach, poza tym powiedz mi czym się różni od tego który podałem w swoim pierwszym poście questionmark.gif
Snoopy
zajmuje mniej miejsca biggrin.gif i o to mi chodziło...
revyag
Chyba mnie nie rozumiesz.
Różni się tym że to:
Kod
alert("End of time....");

jest zamienione na to:
Kod
document.getElementById('tm').innerHTML="-";

Tego chyba mogłeś się sam domyślić, a nie szukać pomocy na innym forum.

Poza tym:
Cytat
aha jak zrobić żeby przy pomocy tego skryptu wyświetlić kilka razy w różnych miejscach strony ten czas ale z innymi wartościami...

To robi drugi skrypt który podałem.
Snoopy
Muszę jeszcze odkopać ten temat bo natrafiłem na pewien problem... więc tak...
skrypt na stronie umieszczam w postaci

echo '<script src=\'script.js\' type=\'text/javascript\'></script>';

i jak wlasnie z poziomu php przenieść do script.js zmienne hours, min i sec
revyag
Nie przekażesz nic do pliku scripts.js. Podaj te wartości jako parametry funkcji inicjującej odliczanie.
np. tak:
  1. <?php
  2. echo '<body onload="time('.$hours.','.$mins.','.$secs.')">';
  3. ?>
Mesektet
Odkopuję ten temat bo mam podobny problem, ale dodatkowo potrzebuję żeby mimo odświeżania strony odliczało dalej (a nie od nowa). Tu chyba cookies by pomogły worriedsmiley.gif
Mam nikłą wiedzę na temat JS więc będę wdzięczna za pomoc smile.gif
revyag
Potrzebna będzie obsługa ciastek stąd:
http://www.quirksmode.org/js/cookies.html

I skrypt. Wygląda to tak że co sekundę jest zapisywane ciastko z aktualnym licznikiem. Po refreshu przy inicjacji licznika sprawdzana jest obecność ciastek, jeśli istnieje to stan licznika jest odczytywany z ciastka i użyty do inicjacji licznika.
Jeśli ciastek nie ma to licznik startuje z domyślnymi wartościami.

Przycisk usuń ciacha zeruje wszystko.

Licznik jest zapamiętywany i po opuszczeniu strony nie idzie dalej. Aby licznik działał po opuszczeniu strony trzeba by zapamiętywać jeszcze czas i przy odczycie pobierać aktualny czas, wyliczać rożnicę w czasie i tą różnicę odejmować od licznika smile.gif Wygląda to prosto ale takie nie jest smile.gif
  1. <script type="text/javascript">
  2.  
  3. var IdNo = 0;
  4.  
  5. //cookie
  6. function createCookie(name,value,days) {
  7. if (days) {
  8. var date = new Date();
  9. date.setTime(date.getTime()+(days*24*60*60*1000));
  10. var expires = "; expires="+date.toGMTString();
  11. }
  12. else var expires = "";
  13. document.cookie = name+"="+value+expires+"; path=/";
  14. }
  15.  
  16. function readCookie(name) {
  17. var nameEQ = name + "=";
  18. var ca = document.cookie.split(';');
  19. for(var i=0;i < ca.length;i++) {
  20. var c = ca[i];
  21. while (c.charAt(0)==' ') c = c.substring(1,c.length);
  22. if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  23. }
  24. return null;
  25. }
  26.  
  27. function eraseCookie(name) {
  28. createCookie(name,"",-1);
  29. }
  30.  
  31. //time
  32. function time (hours,mins,secs,span) {
  33. this.id = "time" + IdNo++;
  34. window[this.id] = this;
  35. this.hours = hours;
  36. this.mins = mins;
  37. this.secs = secs;
  38.  
  39. this.span = span;
  40. this.show = show;
  41. }
  42.  
  43. function show() {
  44.  
  45. createCookie('czas',this.hours+":"+this.mins+":"+this.secs);
  46.  
  47. if( this.secs > 0 ) {
  48. this.secs--;
  49. } else if( this.secs == 0 && this.mins > 0 ) {
  50. this.mins--;
  51. this.secs=59;
  52. } else if ( this.secs == 0 && this.mins == 0 && this.hours > 0 ) {
  53. this.hours--;
  54. this.mins=59;
  55. this.secs=59;
  56. }
  57. if( this.hours == 0 && this.mins == 0 && this.secs == 0 ) {
  58. alert("Koniec czasu");
  59. } else {
  60.  
  61. document.getElementById( this.span ).innerHTML = "Time left: " +
  62. (( this.hours < 10 ) ? ( "0" + this.hours ) : this.hours) + ":" +
  63. (( this.mins < 10 ) ? ( "0" + this.mins ) : this.mins) + ":" +
  64. (( this.secs < 10 ) ? ( "0" + this.secs ) : this.secs);
  65. }
  66. setTimeout("window."+this.id+".show()",1000);
  67. }
  68.  
  69.  
  70. function load() {
  71.  
  72. var cookie_czas = readCookie('czas');
  73.  
  74. if (cookie_czas) {
  75. var out_czas = cookie_czas.split(":");
  76.  
  77. hours = parseInt(out_czas[0]);
  78. mins = parseInt(out_czas[1]);
  79. secs = parseInt(out_czas[2]);
  80.  
  81. var timer = new time(hours,mins,secs,"tm");
  82.  
  83. } else {
  84. var timer = new time(20,0,0,"tm");
  85. }
  86. timer.show();
  87. }
  88.  
  89. function erase() {
  90. eraseCookie("czas");
  91. eraseCookie("data");
  92. document.location.href = document.location.href;
  93. }
  94.  
  95. </head>
  96. <body onload="load()">
  97. <span id="tm"></span><br /><br />
  98. <button onclick="erase()">Usun ciacha</button>
  99. </body>
  100. </html>
Mesektet
Super o to chodziło, dzięki biggrin.gif
xavierek
Witam mam problem skrypt działa ok ale jak zrobic aby przestał ladowac co sekunde jezeli zegarek dojdzie do 0 bo dalem ze ma sie pokazac formularz po X czasie i formularz sie pokazuje ale nie moge nic wpisac bo co sekunde ładuje go na nowo tongue.gifP

użyłem kod
  1. <script type="text/javascript">
  2.  
  3. var hours = 0;
  4. var min = 0;
  5. var sec = 5;
  6.  
  7. function time() {
  8. if(sec > 0) {
  9. sec--;
  10. } else if(min > 0) {
  11. min--;
  12. sec = 59;
  13. } else if(hours > 0) {
  14. hours--;
  15. min = 59;
  16. sec=59;
  17. }
  18.  
  19. if(hours==0 && min==0 && sec==0) {
  20. document.getElementById(\'tm\').innerHTML="<form method=\"post\" action=\"greetings.php\"><input type=\"hidden\" name=\"canal_id\" id=\"cmd\" value=\"1\" />Od kogo<input type=\"hidden\" name=\"cmd\" id=\"cmd\" value=\"add\" /><br><input type=\"text\" name=\"title\" size=\"30\" maxlength=\"40\" value=\"\" /><br><br>Treść pozdrowie<br><textarea id=\"elm1\" name=\"text\" rows=\"4\" cols=\"70\" style=\"width: 300px\"></textarea><br><hr><input type=\"submit\" name=\"save\" value=\"Submit\" /> <input type=\"reset\" name=\"reset\" value=\"Reset\" /></form>";
  21. } else {
  22.  
  23. document.getElementById(\'tm\').innerHTML="Kolejne pozdrowienia możesz wysłać za "
  24. +hours+":"+((min < 10) ? "0" + min : min)+":"+((sec < 10) ? "0" + sec : sec);
  25. }
  26. setTimeout("time();", 1000);
  27. }
  28. </script



problem rozwiazany


  1. <script type="text/javascript">
  2.  
  3. var hours = 0;
  4. var min = 0;
  5. var sec = 5;
  6.  
  7. function time() {
  8. if(sec > 0) {
  9. sec--;
  10. } else if(min > 0) {
  11. min--;
  12. sec = 59;
  13. } else if(hours > 0) {
  14. hours--;
  15. min = 59;
  16. sec=59;
  17. }
  18.  
  19. if(hours==0 && min==0 && sec==0) {
  20. document.getElementById(\'tm\').innerHTML="<form method=\"post\" action=\"greetings.php\"><input type=\"hidden\" name=\"canal_id\" id=\"cmd\" value=\"1\" />Od kogo<input type=\"hidden\" name=\"cmd\" id=\"cmd\" value=\"add\" /><br><input type=\"text\" name=\"title\" size=\"30\" maxlength=\"40\" value=\"\" /><br><br>Treść pozdrowie<br><textarea id=\"elm1\" name=\"text\" rows=\"4\" cols=\"70\" style=\"width: 300px\"></textarea><br><hr><input type=\"submit\" name=\"save\" value=\"Submit\" /> <input type=\"reset\" name=\"reset\" value=\"Reset\" /></form>";
  21.  
  22. } else {
  23.  
  24. document.getElementById(\'tm\').innerHTML="Kolejne pozdrowienia możesz wysłać za "
  25. +hours+":"+((min < 10) ? "0" + min : min)+":"+((sec < 10) ? "0" + sec : sec);
  26. setTimeout("time();", 1000);
  27. }
  28.  
  29. }
  30. </script
trzeba bylo przestawic miejsce setTimeout("time();", 1000);
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.