Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Javascript] Przesuwanie elementu - setTimeout
Forum PHP.pl > Forum > Przedszkole
calvx
Witam,

uczę się Javascriptu i od kilku godzin próbuję zrobić sobie prostą animację w stylu przesuwania elementów. Załóżmy że mam element o id="test". W skrypcie mam coś takiego:
  1. var ax, mx, object, position, positiontext;
  2. mx= screen.width-50;
  3.  
  4. function move(position) {
  5. positiontext=position+"px";
  6. document.getElementById("test").style.left=positiontext;
  7. }
  8.  
  9. function show() {
  10. for(ax=1;ax<=mx;ax+=10) {
  11. setTimeout("move(ax)",100);
  12. }
  13. }

Zadaniem skryptu jest przesunięcie elementu z jednego krańca ekranu do drugiego. Funkcja działa, ale nie tak jak bym tego oczekiwał. Chciałbym aby element blokowy przesuwał się powoli od lewej strony do prawej. Do tego użyłem funkcji setTimeout. Niestety pod operą i IE po wciśnięciu buttona który odpowiada za uruchomienie funkcji przesunięcia, po upłycięciu 100ms element przesuwany jest od razu do prawej strony.
Gdzie popełniłem błąd? Ewentualnie w jaki inny sposób przesuwać elementy w czasie?
nospor
Odpalsz w petli x dziesiat razy setTimeout to nic dziwnego ze ci sie xdziesiat razy odpali po minieciu zadane czasu.
calvx
Nie rozumiem. W pętli raz po razie przesuwam element o 10px, a następnie odczekuję 100ms?
Chyba, że się mylę.

Z tego wychodzi, że setTimeout nie zatrzymuje pętli na 100ms tylko buforuje punkty, które bardzo szybko się zapełniają do screen.width.
W takim razie w jaki sposób odczekać zadaną liczbę milisekund?
nospor
Cytat
Z tego wychodzi, że setTimeout nie zatrzymuje pętli na 100ms
Tak,setTimeout nic nie zatrzymuje. Wystarczy zajrzec do dokumentacji js i zobaczyc co robi setTimeout.

Tak, masz używać setTimeout do wykonania funkcji move(). Ale masz to zrobić raz na początku skryptu a potem wewnatrz funkcji move() a nie w petli.
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.