Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript] Wywoływanie wielokrotnie jednej funkcji
innowwwacje
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.08.2008
Skąd: Warszawa

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


W jaki sposób umożliwić skryptom wielokrotne jednoczesne korzystanie z danej funkcji?



Tradycyjne definiowanie funkcji na zasadzie function cos_tam (id) powoduje, że gdy funkcja nie zostanie zakończona i inny element będzie się do niej odwoływał, pierwsze wywołanie zostanie niejako anulowane. Być może nadpisywane są zmienne funkcji, a może coś innego.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
innowwwacje
post
Post #2





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.08.2008
Skąd: Warszawa

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


Wydaje mi się, że wywoływanie za każdym razem funkcji z serwera to będzie sieczka dla wydajności.

Już opisuję szerzej problem. Ostatni mój temat dotyczył problemu poprawnego interpretowania zdarzenia onmouseout. Gdy div miał wewnątrz diva z tabelą z ikonami poruszanie kursorem w obrębie diva wywoływało nieproszenie funkcję onmouseout. Napisałem sobie funkcje, która ma sprawdzać położenie kursora względem diva. Jeżeli kursor znajduje się w obrębie diva z ikonami ma go nie chować.

Mamy tabelę z listą dodanych kategorii. Po prawej stronie od każdego rekordu do tej pory była lista ikon funkcyjnych (dodaj, usuń, przesuń w górę itp.). W momencie kiedy tych ikon zaczęło przybywać, ergonomia obniżała się. Wpadłem na pomysł, by stworzyć jedną ikonę, która po umieszczeniu na niej kursora myszy pokazywałaby po lewej stronie od niej ikony funkcyjne dotyczące danej kategorii. Tutaj wszystko działa poprawnie.

Mam taką funkcję:
  1. function narzedzia_schowaj ( id )
  2. {
  3. this.id = id;
  4.  
  5. var pozycja = findPos($('narzedzia_ikony_' + id));
  6.  
  7. var szerokosc = $( 'narzedzia_wnetrze_' + id ).offsetWidth;
  8. var wysokosc = $( 'narzedzia_wnetrze_' + id ).offsetHeight;
  9.  
  10. var poczatek_x = pozycja[0];
  11. var koniec_x = pozycja[0]+szerokosc;
  12. var poczatek_y = pozycja[1];
  13. var koniec_y = pozycja[1]+wysokosc;
  14.  
  15. if ( tempX < poczatek_x || tempX > koniec_x || tempY < poczatek_y || tempY > koniec_y )
  16. {
  17. mint.fx.Fade( 'narzedzia_ikony_' + id, 0, 30, 400 );
  18.  
  19. czas_ukrywania_narzedzi = setTimeout ( "$('narzedzia_ikony_' + id).style.display = 'none';", 600 );
  20. }
  21. else
  22. {
  23. setTimeout("narzedzia_schowaj ( id ) ", 200);
  24. }
  25. }

Zdarzenie onmouseout wywoływane jest czasem na ostatnim pikselu poza elementem podczas zdejmowania kursora z diva. W związku z tym jest timeout, który sprawdza, czy faktycznie kursor jest poza divem. W ten sposób ikonki znikają tylko wtedy, gdy kursor fizycznie znajduje się poza ich obszarem.

W momencie kiedy operuję na jednej ikonie tzn. umieszczam na niej kursor po czym go zdejmuję wszystko działa poprawnie.

Całość wyświetlana jest w liście (kategoria pod kategorią itd.). Tak więc ikony są w kolumnie pod sobą. Kiedy przejadę kursorem wzdłuż ikon z pierwszej szybko na drugą, a potem na trzecią i potem dopiero zdejmę kursor myszy z ikony trzeciej, funkcja znikania ikon wywoływana jest tylko dla tej ostatniej.

Wygląda to tak jakby funkcja mogła być używana jednocześnie w jednym czasie tylko raz. Kiedy przed jej zakończeniem wywoływana jest drugi raz, pierwsze wywołanie zostaje anulowane.

@revyag

No niby tak tylko rzecz polega na tym, że te obiekty miałyby być tworzone z automatu dla nieograniczonej ilości elementów generowanych dynamicznie, a nie dla jednego konrketnego...

Ten post edytował innowwwacje 17.03.2009, 12:36:37
Go to the top of the page
+Quote Post

Posty w temacie


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: 13.10.2025 - 09:56