Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS] Timer zatrzymuje się na 0.1
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Dominator
Jak w temacie, dlaczego?

  1. <html>
  2. <head>
  3. <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
  4. <script type="text/javascript">
  5. $(document).ready(function()
  6. {
  7. var milisec=0;
  8. var seconds=0;
  9. function display()
  10. {
  11. if (milisec>=9)
  12. {
  13. milisec=0;
  14. seconds+=1;
  15. }
  16. else
  17. {
  18. milisec+=1;
  19. setInterval("display()",100);
  20. $("div[id='timer']").text(seconds+"."+milisec);
  21. }
  22. }
  23. display();
  24. });
  25. </script>
  26. </head>
  27. <body>
  28. <div id="timer"></div>
  29. </body>
  30. </html>
lukasz1985
  1. <!--
  2. To change this template, choose Tools | Templates
  3. and open the template in the editor.
  4. -->
  5. <!DOCTYPE html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. </head>
  9. <body>
  10. <div>TODO write content</div>
  11.  
  12.  
  13. <script type="text/javascript" >
  14.  
  15. window.onload = function()
  16. {
  17. var time = 0;
  18. function display(){
  19. time += 0.1
  20.  
  21. seconds = Math.floor(time );
  22. milisec = Math.floor(( time *10 ) % 10 );
  23. document.getElementById("timer").innerHTML = seconds+"."+milisec;
  24. }
  25.  
  26. setInterval(display, 100);
  27. };
  28. </script>
  29.  
  30. <div id="timer">
  31.  
  32. </div>
  33. </body>
  34. </html>
kamil4u
Tobie chyba chodzi o funkcję setTimeout a nie setInterval.

Chociaż powinieneś przerobić tak kod, żeby skorzystać z setInterval. Jak? Zajrzyj do dokumentacji( szukaj pod "MDC" ). A jeżeli sobie nie poradzisz to zgłoś się ponownie i napisz czy chcesz to zrozumieć czy potrzebujesz gotowca. Wtedy opiszę wszystko dokładnie(lub mniej przy gotowcu ) smile.gif

Pozdrawiam

--edit--
O widzisz - już dostałeś gotowca smile.gif

--edit2--
@lukasz1985:
Jeszcze przyczepię się do Twojego kodu.
W kodzie masz:
- document.getElementById("timer")

Ja bym użył zmiennej globalnej, gdzie zapisałbym referencję do tego elementu. Tak jak masz teraz to niepotrzebne marnowanie czasu na wyszukiwanie tego elementu co bardzo krótki czas. I tak wiem, że to prosty przykład i pewnie się bardzo nie starałeś, ale piszę to po to, że może w przyszłości będziesz pisał coś większego to wtedy warto robić takie optymalizacje smile.gif

Kiedyś można było wyczuć różnicę gołym okiem, teraz są lepsze przeglądarki i komputery, ale takie dobre nawyki dobrze mieć.
Dominator
Dziękuję za pomoc, opracowałem własne i znacznie krótsze narzędzie, a działa tak samo smile.gif

Jakbyście mi mogli powiedzieć jeszcze - jaka funkcja zaokrągla liczby? (w php jest round)
kamil4u
Cytat
Dziękuję za pomoc, opracowałem własne i znacznie krótsze narzędzie, a działa tak samo smile.gif

Pochwal się smile.gif

Cytat
Jakbyście mi mogli powiedzieć jeszcze - jaka funkcja zaokrągla liczby? (w php jest round)

Google -> "js round" -> http://www.w3schools.com/jsref/jsref_round.asp
Dominator
  1. <html>
  2. <head>
  3. <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
  4. <script type="text/javascript">
  5. $(document).ready(function()
  6. {
  7. var system =
  8. {
  9. round: function(n, k)
  10. {
  11. var factor = Math.pow(10, k+1),
  12. n = Math.round(Math.round(n*factor)/10);
  13. return n/(factor/10);
  14. },
  15. initTimer: function()
  16. {
  17. window.setInterval(function()
  18. {
  19. var a = $("div[id='timer']").text(),
  20. b = "0.1",
  21. c = system.round(Number(a) + Number(b), 1);
  22. $("div[id='timer']").text(c);
  23. }, 100);
  24. }
  25. }
  26. system.initTimer();
  27. });
  28. </script>
  29. </head>
  30. <body>
  31. <div id="timer">0.1</div>
  32. </body>
  33. </html>


Co o tym sądzicie?
kamil4u
Nie powiedziałbym, że jest to lesze smile.gif

Krótkie uwagi( trudno to nazwać błędami ):
-
Kod
b = "0.1",
operuj na liczbach nie na tekstach, czyli zamieniaj string to int, a nie int to string



-
Kod
$("div[id='timer']")
jQuery ma dostęp do id za pomocą $('#id')
-
Kod
Math.round(Math.round(n*factor)/10);


Po co zewnętrze Math.round?

- jak dla mnie kod jest brzydki - w sensie wizualnym. ale to moje prywatne odczucie - z kilka sekund zajęło mi ogarnięcie o co chodzi, gdzie np. przy kodzie ~lukasz1985 od razu widziałem co gdzie i z czym smile.gif

- funkcję round zastąp tym kodem: https://developer.mozilla.org/en-US/docs/Ja...ects/Math/round -> "Example: Decimal rounding"


Generalnie dobrze, że próbujesz pisać coś sam, a nie jak większość kopiujowanie rozwiązania. Ja też próbowałem wszystko zawsze sam pisać i właśnie dzięki temu mogę dziś powiedzieć, że umiem JS. Jesteś na dobrej drodze. Powodzenia!
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.