Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS] Funkcja zliczania czasu w dół
Forum PHP.pl > Forum > Po stronie przeglądarki
Luke_Star
Potrzebowałem napisac sobie funkcje zliczania czasu tj. obnizania go od wartości poczatkowej, niestety po napisaniu przezemnie funkcji w JS zliczanie nie działa... (wartośc początkowa jest wpisywana ale Update wartości nie działa :/). Jak narazie jestem początkującym w JS bo jakoś odpychały mnie jezyki po stronie przeglądarki, no ale w końcu zaszła potrzeba uzywania JS'a. Moglibyscie powiedziec co moze byc nie tak? Z góry dzięki.

  1. <?php
  2. function start(days,hours,min,sec)
  3. {
  4.  
  5. setTimeout("update()", 1000);
  6.  
  7. reMin=59;
  8. reSec=59;
  9. reHours=23;
  10. Day="dni"
  11. if (min < 0) {
  12. hours--;
  13. min=reMin;
  14. sec=reSec;
  15. }
  16.  
  17. if (sec < 10) {
  18. prefixSec="0";
  19. }
  20. else {
  21. prefixSec="";
  22. }
  23. if (min < 10) {
  24. prefixMin="0";
  25. } else {
  26. prefixMin="";
  27. }
  28.  
  29. document.getElementById("timer").innerHTML="<span id="Days" style="font-weight: normal; font-size: 14pt">"+days+Day+"</span> <span id="Hours" style="font-weight: normal; font-size: 14pt">"+hours+"</span>:<span id="Min" style="font-weight: normal; font-size: 14pt">"+prefixMin+min+"</span>:<span id="Sec" style="font-weight: bold; font-size: 12pt">"+prefixSec+sec+"</span>";
  30.  
  31. }
  32.  
  33. function update()
  34. {
  35.  
  36. setTimeout("update()", 1000);
  37.  
  38. sec--;
  39. if (min == 0 && sec == 0)
  40. {
  41. hours--;
  42. min=reMin;
  43. sec=reSec;
  44. }
  45.  
  46. if (sec < 0)
  47. {
  48. sec = 59;
  49. min--;
  50. }
  51. if (hours < 0 && days > 0) {
  52. day--;
  53. hours=reHours;
  54. min=reMin;
  55. sec=reSec;
  56. }
  57. if(hours < 0 && days < 0) {
  58. days="";
  59. Day="";
  60. min=reMin;
  61. sec=reSec;
  62. }
  63.  
  64. var prefixMin;
  65. if(sec < 10) {
  66. prefixMin="0";
  67. } else {
  68. prefixMin="";
  69. }
  70. min = prefixMin+min;
  71. document.getElementById("Min").innerHTML=min;
  72. var prefixSec;
  73.  
  74. if (sec < 10) {
  75. prefixSec="0";
  76. }
  77. else {
  78. prefixSec="";
  79. }
  80.  
  81. sec = prefixSec+sec;
  82.  
  83. document.getElementById("Sec").innerHTML=sec;
  84.  
  85. document.getElementById('Hours').innerHTML=hours;
  86.  
  87. document.getElementById('Days').innerHTML=days;
  88.  
  89.  
  90. }
  91. ?>
akubiczek
Zacznijmy od tego, że zmienna sec nie jest nigdzie zdefiniowana, a ty ją chcesz w linii 38 zmniejszać. Podobnie niezrozumiałe operacje wyczyniasz z innymi zmiennymi.

Albo nie pokazałeś całego kodu.
Luke_Star
pokazałem stricte kod JS funkcje w dokumencie wywołuje jako:

  1. <!--
  2. start(1,22,43,0);
  3. -->


a wiec zmienne zostaja ustawione
akubiczek
Jak zostają ustawione? blink.gif Przecież to są argumenty funkcji start(), więc jak chcesz się do nich dostać w funkcji update()?
Luke_Star
tu chyba kłania mi sie nieznajomośc logiki JS ;/ zdawało mi sie ze przez wykonanie funkcji setTimeout zmienne wywołane w funkcji start zostana przekazane funkcji update. Najwidoczniej jest inaczej smile.gif jeszcze mam duze braki w znajomosci tego jezyka ale praktykuje go moze z tydzień wiec moze cos ze mnie bedzie. Ale powiedz mi jak przekazać wartości tych zmiennych do drugiej funkcji?
devnul
Kod
setTimeout("update("+days+","+hours+","+min+","+sec+")", 1000);


ale zamianst tego możesz zadeklarować zmienne globalnie, czyli poza deklaracją jakiejkolwiek funkcji robisz:
Kod
var days;

itd
akubiczek
Zrób to po prostu w ten sposób, że zadeklaruj te zmienne poza funkcją, a w funkcji start() przepisz argumenty do tych zmiennych globalnych. Coś na wzór tego:

var gSec=0;

function start(sec) {
gSec=sec;
}

function update() {
//tu korzystamy już z gSec
}

W uproszczeniu oczywiście.
Luke_Star
devnul dzieki bardzo działa biggrin.gif akubiczek tobie równiez składam dzieki za pomoc :-)
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.