Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> setTimeout w pętli for
matewka
post 14.10.2010, 13:44:39
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 14.11.2009

Ostrzeżenie: (0%)
-----


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?

Ten post edytował matewka 14.10.2010, 13:50:47
Go to the top of the page
+Quote Post
erix
post 14.10.2010, 15:39:45
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
matewka
post 14.10.2010, 15:46:20
Post #3





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 14.11.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 22.06.2025 - 12:26