Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [js] wywolanie opóźnionej funkcji
XP'ek
post
Post #1





Grupa: Zarejestrowani
Postów: 263
Pomógł: 9
Dołączył: 3.05.2009
Skąd: Wroc

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
kufalo
post
Post #2





Grupa: Zarejestrowani
Postów: 251
Pomógł: 2
Dołączył: 24.08.2005

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


na pewno tu bedzie potrzebny setTimeout
Go to the top of the page
+Quote Post
skowron-line
post
Post #3





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


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
Go to the top of the page
+Quote Post
zegarek84
post
Post #4





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


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);

Go to the top of the page
+Quote Post
skowron-line
post
Post #5





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


@zegarek84 czytanie ze zrozumieniem, pytanie było "jak zrobić" a nie zróbcie mi funkcję.
Go to the top of the page
+Quote Post
zegarek84
post
Post #6





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


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...

Ten post edytował zegarek84 12.08.2010, 12:46:42
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 07:50