Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Interwał z opóźnieniem
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
koxu1996
Witam. Może na początek nakreślę o co mi chodzi: mam stronę z aukcjami i w celu eliminacji opóźnień które spowodowane są pobieraniem czasu ajaxem. W tym celu zrobiłem że pobiera czas do tablicy w js i interwał zmniejsza sekudny, a ajax pobiera dane i ewentualnie poprawia jeśli czasy się różnią. Nie wiem czy jest to optymalne rozwiązanie ale próbowałem robić tak:
  1. var lagsTime
  2. setInterval(function(){update()},1000 + lagsTime);

przy czym za każdym razem jest zmieniany lagsTime. Jednak takie coś nie działa. Próbowałem też żeby funkcja wykonywała sama siebie z opóźnieniem:
  1. function update(time)
  2. {
  3. //...
  4. setTimeout(update(lagsTime), 0.1* lagsTime);
  5. lagsTime = lagsTime * 0.9;
  6. }


Jednak mimo to nie chodzi. Jak to rozwiązać? Ewentualnie może ktoś ma pomysł jak zoptymalizować wyświetlanie czasu?
PaFaT
Drogi koxu1996,

Po pierwsze, do takich celów interwał się nie nadaje, ponieważ nie da się zmienić czasu ustawionego w interwale.
Należy użyć timeout'u.

Funkcja update() powinna wyglądać mniej więcej następująco:

[JAVASCRIPT] pobierz, plaintext
  1. var lagsTime;
  2. function update()
  3. {
  4. //właściwa treść funkcji, w której ustawiana jest wartość zmiennej lagsTime
  5.  
  6. var timeOut = 1000 + lagsTime;
  7. window.setTimeout("update(); ", timeOut);
  8. }
[JAVASCRIPT] pobierz, plaintext


Jeśli chodzi o drugi kod, po prostu zamień linię:
setTimeout(update(lagsTime), 0.1 * lagsTime)

na:
window.setTimeout("update(" + (lagsTime * 0.9) + "); ", lagsTime * 0.1);

Powinno zadziałać...
PrinceOfPersia
Cytat
window.setTimeout("update(" + (lagsTime * 0.9) + "); ", lagsTime * 0.1);

nie powinno się dawać stringa do setTimeout (antywzorzec), lepiej (bardziej poprawnie) wrzucić w funkcję.
Kod
setTimeout(function() { update(lagsTime * 0.9) } , lagsTime * 0.1);

taj samo w drugim zamiast
Kod
setTimeout("update(); ", timeOut);

możemy wywalić stringa i napisać:
Kod
setTimeout(update, timeOut);

oczywiście to drobiazgi, ale lubię język JavaScript i zwracam uwagę na drobiazgi wink.gif
No i window jest domyślne, nie trzeba go w takich wypadkach pisać.

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.