Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] kilkukrotke wykorzystanie zegraka
Forum PHP.pl > Forum > Przedszkole
colinQ
Mam zegarek JS i chcę ten zegarek wykorzystać 2 razy na stronie... I pojawiają się dwa "okienka" dajmy na to "okienko35" i "okienko27" ale działa tylko "okienko35". Przypuszczam że błąd siedzi tu:

  1. <body onload=zegar<? echo $losowa; ?>();><span id="okienko">-</span></body>


bo próbuję dodać do body 2 razy onload... ale jak to zrobić aby można było mieć 2 zegarki na 1 stronie...

  1. function wyswietl_zegarek_odl($od_czego) {
  2.  
  3. $losowa = rand(0, 50);
  4.  
  5. ?>
  6.  
  7. <script language="javascript" type="text/javascript"> 
  8. <!-- 
  9. i = 0;
  10. function zegar<? echo $losowa; ?>() {
  11. teraz = <? echo time(); ?> + i;
  12. dzien = <? echo $od_czego; ?>
  13. sekund = Math.abs((teraz-dzien)); 
  14. minut = Math.floor(sekund/60); 
  15. godzin = Math.floor(minut/60); 
  16. dni = Math.floor(godzin/24); 
  17. lat = Math.floor(dni/365); 
  18. sekund = Math.floor(sekund-minut*60); 
  19. minut = Math.floor(minut-godzin*60); 
  20. godzin = Math.floor(godzin-dni*24); 
  21. dni = Math.floor(dni-lat*365);
  22. if(dni > 0)
  23. {
  24. dni = dni * 24;
  25. godzin = godzin + dni;
  26. }
  27. godziny = Math.floor(godzin-1);
  28. roznica=+godzin+ 
  29. ":"+((minut<10)?"0":"")+minut+ 
  30. ":"+((sekund<10)?"0":"")+sekund; 
  31. document.getElementById("okienko").innerHTML = ""+roznica; 
  32. if (teraz<dzien) { 
  33. i = i + 1;
  34. setTimeout("zegar<? echo $losowa; ?>()",1000); 
  35. }
  36. else
  37. {
  38. location.reload();
  39. }
  40. // --> 
  41. </script>
  42.  
  43. <body onload=zegar<? echo $losowa; ?>();><span id="okienko">-</span></body>
  44.  
  45. <?
  46.  
  47.  
  48.  
  49. }
  50.  
  51. ?>
lord_t
Nie do końca rozumiem szczerze mówiąc. Ale skoro chcesz mieć 2 zegarki na stronie to co za problem dwa razy wykorzystać setTimeout()?

Nie wiem jak dwa razy chciałeś dodać onload do body; możesz coś wywołać w onload 2 razy:
  1. <body onload="zegar<? echo $losowa; ?>();zegar<? echo $losowa2; ?>();">

?
colinQ
Pewnie to będzie to tylko jak dodać jeżeli to jest w funkcji.

Bo ja to wywołuję w funkcji i nie wiem jak dodać drugą wartość do onload. Bo normalnie po wywołaniu 2 razy funkcji byłoby:

(... kod funkcji...)
<body onload=zegar1();>
(... kod funkcji...)

(... kod funkcji...)
<body onload=zegar2();>
(... kod funkcji...)


a powinno być raczej....

(... kod funkcji...)
<body onload=zegar1();>
(... kod funkcji...)

(... kod funkcji...)
<body onload="zegar1();zegar2();">
(... kod funkcji...)
lord_t
Weź wklej cały dotychczasowy kod, bo nie łapie w czym problem.
colinQ
Ok.

  1. function wyswietl_zegarek_odl($od_czego) {
  2.  
  3. $losowa = rand(0, 50);
  4.  
  5. ?>
  6.  
  7. <script language="javascript" type="text/javascript"> 
  8. <!-- 
  9. i = 0;
  10. function zegar<? echo $losowa; ?>() {
  11. teraz = <? echo time(); ?> + i;
  12. dzien = <? echo $od_czego; ?>
  13. sekund = Math.abs((teraz-dzien)); 
  14. minut = Math.floor(sekund/60); 
  15. godzin = Math.floor(minut/60); 
  16. dni = Math.floor(godzin/24); 
  17. lat = Math.floor(dni/365); 
  18. sekund = Math.floor(sekund-minut*60); 
  19. minut = Math.floor(minut-godzin*60); 
  20. godzin = Math.floor(godzin-dni*24); 
  21. dni = Math.floor(dni-lat*365);
  22. if(dni > 0)
  23. {
  24. dni = dni * 24;
  25. godzin = godzin + dni;
  26. }
  27. godziny = Math.floor(godzin-1);
  28. roznica=+godzin+ 
  29. ":"+((minut<10)?"0":"")+minut+ 
  30. ":"+((sekund<10)?"0":"")+sekund; 
  31. document.getElementById("okienko").innerHTML = ""+roznica; 
  32. if (teraz<dzien) { 
  33. i = i + 1;
  34. setTimeout("zegar<? echo $losowa; ?>()",1000); 
  35. }
  36. else
  37. {
  38. location.reload();
  39. }
  40. // --> 
  41. </script>
  42.  
  43. <body onload=zegar<? echo $losowa; ?>();><span id="okienko">-</span></body>
  44.  
  45. <?
  46.  
  47.  
  48.  
  49. }
  50. (...)
  51. echo '<table style="border-collapse:collapse; font_size: 11px;" width="100%"><tr><td style="border: 1px dashed gray;"><center><b>gracz</b></center></td><td style="border: 1px dashed gray;"><center>'.$fetch_misji['osoba'].'</center></td></tr>';
  52. echo '<tr><td style="border: 1px dashed gray;" ><center><b>czas</b></center></td><td style="border: 1px dashed gray;"><center>'; wyswietl_zegarek_odl($fetch_misji['time']); echo '</center></td></tr>';
  53. echo '<tr><td style="border: 1px dashed gray;" ><center><b>misja</b></center></td><td style="border: 1px dashed gray;"><center>'.szpieg_pok_pel_naz($fetch_misji['nazwa']).'</center></td></tr>';
  54. echo '</table><br><br>';
  55. (...)
  56. echo '<br>';
  57. echo 'Wykonanych misji: '.$fet_tego['ile_mis'].'<br>';
  58. echo 'Koszt misji: '.$koszt.' zł<br>';
  59. echo 'Czas misji: '.date("00:i:s", $czas).'<br>';
  60. echo 'Czas pracy: '; wyswietl_zegarek_odl($od_czego); echo '&nbsp; (72:00:00)<br>';


Wyświetla:

gracz test
czas 0:04:40
misja pokaż stan surowców

Wykonanych misji: 0
Koszt misji: 0
Czas misji: 20:00:00
Czas pracy: - (72:00:00)


A powinno:

gracz test
czas 0:04:40
misja pokaż stan surowców

Wykonanych misji: 0
Koszt misji: 0
Czas misji: 20:00:00
Czas pracy: 42:28:44 (72:00:00)
lord_t
1. I chcesz, żeby ten czas pracy był co sekundę zwiększany?
2. Po co Ci drugi zegar?
colinQ
#1
gracz test
czas 0:04:40 - maleje, jest to czas misji, liczy go funkcja JS
misja pokaż stan surowców

Wykonanych misji: 0
Koszt misji: 0
Czas misji: 20:00:00 - nieruchomy
Czas pracy: - (72:00:00) - maleje, liczy go funkcja JS

#2

Każdy zegar liczy inny czas smile.gif

Dlatego potrzebne są 2...

ten 1 liczy czas do końca misji...

a ten drugi liczy czas do końca wyprawy... (pracy)
lord_t
Ja bym zrobił funkcję js ( na podstawie Twojej) zegar(czas,plusMinus,gdzieWyswietlic) która:
zmieniałaby czas (parametr funkcji) o 1 sekundę na plus lub minus (jesli plusMinus <0 to na minus, jesli >0 to na plus) formatowałaby tekst, który ma być wyświetlony, i wpisywała do gdzieWyswietlic (parametr; id elementu).

A co do onload:

(pseudokod)
  1. <body onload="zegar(czas_wpisany_przez_php, -1, id_elementu_1);zegar(czas_2_wpisany_przez_php, 1, id_elementu_2);">


PS. Wywołanie setTimeout() w funkcji zegar powinno wyglądać bodajże tak: (pisane z palca)
  1. setTimeout("zegar(\""+czas+"\","+plusMinus+",\""+gdzieWyswietlic+"\")",1000);
colinQ
To nie jest mój kod zegarka, ja bardzo słabo znam JS więc nic nie kumam...

Wolałbym jakieś prostsze rozwiązanie...

Więc pomoże ktoś?

----------| czytaj wyżej, odświeżyłem temat |----------
lord_t
  1. <script language="javascript" type="text/javascript">
  2. <!--
  3. /*
  4. Zmienia wartość /czas/ podaną w sekundach co 1 sekundę.
  5. Jeśli /plusMinus/ >0 czas zostaje zwiększony, w przec. razie zmniejszony
  6. /gdzieWyswietlic/ to id elementu w którym ma znaleźć się czas (sformatowany tekst)
  7. Domyslnie funkcja liczy tak długo, aż czas spadnie do zera, ale można np. ustawić
  8. odliczanie od 15 sekund do 20. W tym celu należy ustawić /plusMinus/ na np.1
  9. oraz podać 4 argument do funkcji ( zmienWartosc(15,1,"jakies_id",20); )
  10. Czwarty argument to czas, w którym strona zostanie przeładowana.
  11. /czas/ jest zawsze brany w funkcji jako jego wartość bezwzględna |czas|
  12.  
  13. Opis i modyfikacje funkcji: lord_t
  14. luty.2008
  15. */
  16. function zmienWartosc(czas,plusMinus,gdzieWyswietlic) {
  17. sekund = czas = Math.abs(czas);
  18. minut = Math.floor(sekund/60);
  19. godzin = Math.floor(minut/60);
  20. dni = Math.floor(godzin/24);
  21. lat = Math.floor(dni/365);
  22. sekund = Math.floor(sekund-minut*60);
  23. minut = Math.floor(minut-godzin*60);
  24. godzin = Math.floor(godzin-dni*24);
  25. dni = Math.floor(dni-lat*365);
  26.  
  27. if(dni > 0)
  28. {
  29. dni = dni * 24;
  30. godzin = godzin + dni;
  31. }
  32.  
  33. godziny = Math.floor(godzin-1);
  34. roznica = godzin+ ":"+((minut<10)?"0":"") +minut+
  35. ":"+((sekund<10)?"0":"")+sekund;
  36.  
  37. document.getElementById(gdzieWyswietlic).innerHTML =roznica;
  38.  
  39. var koniec=0;
  40. var dodatkowyArg="";
  41. if(arguments.length>3)
  42. {
  43. koniec=arguments[3];
  44. dodatkowyArg=","+koniec;
  45. }
  46.  
  47. if (czas!=koniec)
  48. {
  49. if(plusMinus>0) {czas++;}
  50. else czas--;
  51.  
  52. setTimeout("zmienWartosc(\""+czas+"\","+plusMinus+",\""+gdzieWyswietlic +"\""+dodatkowyArg+")",1000);
  53. }
  54. else
  55. {
  56. location.reload();
  57. }
  58. }
  59. // -->
  60.  
  61. <?
  62. $czas1= time()-$fetch_misji['time']; // czas1 to ilość sekund do zakończenia działania1
  63. $czas2=time()-$od_czego; //czas2 to ilość sekund do zakończenia działania2
  64. ?>
  65.  
  66. <body onload="zmienWartosc(<? echo $czas1; ?>,-1,'iden1');zmienWartosc(<? echo $czas2; ?>,-1,'iden2');">
  67.  
  68. <? }
  69. (...)
  70. echo '<table style="border-collapse:collapse; font_size: 11px;" width="100%"><tr><td style="border: 1px dashed gray;"><center><b>gracz</b></center></td><td style="border: 1px dashed gray;"><center>'.$fetch_misji['osoba'].'</center></td></tr>';
  71. echo '<tr><td style="border: 1px dashed gray;" ><center><b>czas</b></center></td><td style="border: 1px dashed gray;"><center><div id="iden1"></div></center></td></tr>';
  72. echo '<tr><td style="border: 1px dashed gray;" ><center><b>misja</b></center></td><td style="border: 1px dashed gray;"><center>'.szpieg_pok_pel_naz($fetch_misji['nazwa']).'</center></td></tr>';
  73. echo '</table><br><br>';
  74. (...)
  75. echo '<br>';
  76. echo 'Wykonanych misji: '.$fet_tego['ile_mis'].'<br>';
  77. echo 'Koszt misji: '.$koszt.' zł<br>';
  78. echo 'Czas misji: '.date("00:i:s", $czas).'<br>';
  79. echo 'Czas pracy: <div id="iden2"></div> (72:00:00)<br>';
  80. ?>
  81.  
  82.  
  83. </body>


0. Masz, ale od jutra ucz się js. Polecam na początek: ferrante.pl

Co do kodu :
1.Wartości $czas1 i $czas2 nie jestem pewien jakie masz. W każdym razie muszą być to czasy (w sekundach) do zakończenia działań do których chcesz odliczać czas.
2.Pewnym 'problemem' (a może i nie) będzie w tej chwili to, że jeśli jeden zegar doleci do końca to strona zostanie przeładowana.
3.Możliwe, że w części php popełniłem literówkę.
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.