Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Countdown
Snoopy
post 22.03.2006, 23:11:41
Post #1





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 5.02.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
revyag
post 23.03.2006, 13:26:25
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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>


--------------------
-------------

------
Go to the top of the page
+Quote Post
Snoopy
post 23.03.2006, 14:34:55
Post #3





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 5.02.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
revyag
post 24.03.2006, 21:37:57
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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


--------------------
-------------

------
Go to the top of the page
+Quote Post
Snoopy
post 24.03.2006, 21:43:39
Post #5





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 5.02.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
revyag
post 24.03.2006, 22:24:36
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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


--------------------
-------------

------
Go to the top of the page
+Quote Post
Snoopy
post 24.03.2006, 23:43:40
Post #7





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 5.02.2006

Ostrzeżenie: (0%)
-----


zajmuje mniej miejsca biggrin.gif i o to mi chodziło...
Go to the top of the page
+Quote Post
revyag
post 25.03.2006, 18:27:47
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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.


--------------------
-------------

------
Go to the top of the page
+Quote Post
Snoopy
post 26.03.2006, 00:41:55
Post #9





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 5.02.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
revyag
post 26.03.2006, 17:32:02
Post #10





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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. ?>


--------------------
-------------

------
Go to the top of the page
+Quote Post
Mesektet
post 27.06.2008, 08:11:41
Post #11





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 27.06.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
revyag
post 27.06.2008, 12:56:50
Post #12





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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>


--------------------
-------------

------
Go to the top of the page
+Quote Post
Mesektet
post 27.06.2008, 22:10:07
Post #13





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 27.06.2008

Ostrzeżenie: (0%)
-----


Super o to chodziło, dzięki biggrin.gif
Go to the top of the page
+Quote Post
xavierek
post 24.09.2010, 13:55:11
Post #14





Grupa: Zarejestrowani
Postów: 92
Pomógł: 2
Dołączył: 22.03.2009

Ostrzeżenie: (0%)
-----


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

Ten post edytował xavierek 24.09.2010, 14:01:00
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 14:32