Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] wywolanie opóźnionej funkcji
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
XP'ek
jak zrobic aby funkcja wywolywala mi sie co np. 10 sek robila obrót petli while np. 5 razy i za kazdym razem opozniala sie o pol sek. tzn co 10 sek wywolana jest funkcja w ktorej petle 5 razy obracajac sie pokazuje 5 roznych liczb kazda przez pol sekundy
kufalo
na pewno tu bedzie potrzebny setTimeout
skowron-line
Cytat(kufalo @ 12.08.2010, 09:25:28 ) *
na pewno tu bedzie potrzebny setTimeout

[JAVASCRIPT] pobierz, plaintext
  1. setTimeout('function', 100 * i); // i to numer iteracji bez tego 5 razy w tym samym czasie sie wykona.
[JAVASCRIPT] pobierz, plaintext
zegarek84
Cytat(XP'ek @ 10.08.2010, 11:16:03 ) *
jak zrobic aby funkcja wywolywala mi sie co np. 10 sek robila obrót petli while np. 5 razy i za kazdym razem opozniala sie o pol sek. tzn co 10 sek wywolana jest funkcja w ktorej petle 5 razy obracajac sie pokazuje 5 roznych liczb kazda przez pol sekundy

  1. <html><body><div id="liczby">TUTAJ POJAWIĄ SIĘ LICZBY</div>
  2.  
  3. var $in_div=document.getElementById('liczby').firstChild,
  4. $interval;
  5.  
  6. function pokaz_liczbe($i){
  7. this.wykonaj=function(){
  8. $in_div.nodeValue=$i;
  9. }
  10. }
  11. function ukryj_ostatnia(){
  12. $in_div.nodeValue='';
  13. }
  14. function co_10(){
  15. var $i=0,$l;
  16. do{
  17. $l = new pokaz_liczbe($i+1);
  18. setTimeout($l.wykonaj, 500*$i);
  19. }while(++$i<5);
  20. setTimeout(ukryj_ostatnia, 500*$i);
  21. $i=0;
  22. }
  23. $interval=setInterval(co_10, 10000);

skowron-line
@zegarek84 czytanie ze zrozumieniem, pytanie było "jak zrobić" a nie zróbcie mi funkcję.
zegarek84
i tak on to musi jeszcze "zaimplementować" do swoich potrzeb - jeśli źle to zrobi to może mieć małe kuku... jeśli skrypt będzie chciał dać w nagłówku to też musi go po załadowaniu DOM dopiero wywołać... dobrze by było te zmienne $in_div i $interwal dać gdzieś indziej bo tak są w obiekcie globalnego window.. poza tym eval też nie jest najlepszym rozwiązaniem - już lepiej by było skorzystać z anonimowej funkcji [ja tutaj użyłem obiektu do przechowania liczby] (fakt, że setTimeout może przyjąć więcej argumentów ale problemem jest tutaj IE... z kolei eval jest tu mało wygodne gdyż odwołać można się tylko do zmiennych/funkcji z obiektu window...)... i jeszcze podany przeze mnie przykład nie umiejętnie wykorzystany na większym liczniku jest z wyciekiem pamięci - jeśli jakoś liczby się powtarzają dobrze by było gdzieś zrobić do tego uchwyt a nie co chwila tworzyć nowy obiekt...
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.