Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: setTimeout w pętli for
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
matewka
Witam. Nurtuje mnie pewien problem. Chciałbym zrobić funkcję, która przesuwa obrazek w dół i w prawo o 3 piksele w pewnych odstępach czasu. Z tym, że chciałbym, żeby te odstępy czasu zwiększały się z każdym przesunięciem. Oto kod, który stworzyłem:
  1. function oneStep() {
  2. div = document.getElementById('fotka').style
  3. div.left = parseInt(div.left)+3+"px"
  4. div.top = parseInt(div.top)+3+"px"
  5. }
  6. function moveImage() {
  7. for(i=1000;i<=15000;i+=1000) {
  8. window.setTimeout("oneStep()",i)
  9. }
  10. }

Jak widać, funkcja oneStep() przesuwa obrazek, ale przedtem funkcja moveImage() każe jej odczekać jedną sekundę. Następnie oneStep() znów przesuwa obrazek i tym razem ma odczekać 2 sekundy, następnie 3, 4 itd. aż do 15 sekund. Niestety w rzeczywistości tak się nie dzieje. Obrazek cały czas przesuwa się co 1 sekundę aż przesunie się 14 razy. Specjalnie ustawiłem długie opóźnienie, żeby zniwelować błędy spowodowane szybkością czytania kodu przez przeglądarkę. Ale niestety różnica w czasie między kolejnymi przesunięciami nadal jest niezauważalna. Co robię źle?
erix
Wszystkie timeouty startują jednocześnie, w tym problem.

Pętlą raczej tego nie zrobisz:
[JAVASCRIPT] pobierz, plaintext
  1. var counter = 15;
  2. var delay = 1000;
  3.  
  4. function oneStep() {
  5. counter--;
  6. if(counter<0){
  7. return;
  8. }
  9.  
  10. div = document.getElementById('fotka').style
  11. div.left = parseInt(div.left)+3+"px"
  12. div.top = parseInt(div.top)+3+"px"
  13.  
  14. delay += 1000;
  15.  
  16. setTimeout(oneStep, delay);
  17. }
  18.  
  19. oneStep();
[JAVASCRIPT] pobierz, plaintext
matewka
Rzeczywiście działa! Wielkie dzięki. Cały dzień się nad tym głowiłem. Też już myślałem o podobnym rozwiązaniu, ale sama koncepcja była dla mnie, początkującego javowca, zbyt skomplikowana, więc nawet nie zaczynałem.
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.