Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mootools] zatrzymanie opóźnionego zdarzenia
Forum PHP.pl > Forum > Po stronie przeglądarki
cichy380
proszę o pomoc przy poniższym kodzie,

powoduje on wyświetlenie komunikatu (przykładowa akcja) po najechaniu na element (zdarzenie),
akcja wykonuje się z opóźnieniem 2sek
[JAVASCRIPT] pobierz, plaintext
  1. var fAkcja = function(){
  2. alert('wyświetlam komunikat!');
  3. }
  4.  
  5. $('idDivElement').addEvent('mouseenter', function(){ // akcja wywoływana po najechaniu kursorem na element o ID "idDivElement"
  6. fAkcja.delay(2000);
  7. })
[JAVASCRIPT] pobierz, plaintext

kod działa, ale... chciałbym aby akcją się nie wywoływała w przypadku gdy kursor opuści element przed upływem 2sek,
czyli chodzi o zatrzymanie / przerwanie akcji w momencie opuszczenia elementu przez kursor.
skowron-line
addEvents + mouseenter, mouseleave + cancel
cichy380
Cytat(skowron-line @ 20.01.2011, 11:34:41 ) *
addEvents + mouseenter, mouseleave + cancel

nie działa

zwraca: fAkcja.cancel is not a function


zrobiłem tak:
[JAVASCRIPT] pobierz, plaintext
  1. var fAkcja = function(){
  2. alert('wyświetlam komunikat!');
  3. }
  4.  
  5. $('idDivElement').addEvent('mouseenter', function(){ // akcja wywoływana po najechaniu kursorem na element o ID "idDivElement"
  6. fAkcja.delay(2000);
  7. })
  8.  
  9. $('idDivElement').addEvent('mouseleave', function(){ // akcja wywoływana po zdjęciu kursora z elementu o ID "idDivElement"
  10. fAkcja.cancel();
  11. })
[JAVASCRIPT] pobierz, plaintext
thek
A nie powinno być po prostu:
[JAVASCRIPT] pobierz, plaintext
  1. $('idDivElement').addEvent( 'mouseleave', $clear(fAkcja) );
[JAVASCRIPT] pobierz, plaintext

?
Nie używam i nigdy nie używałem MooTools. Użyłem google i dokumentacji winksmiley.jpg
http://docs111.mootools.net/#$clear
cichy380
Cytat(thek @ 20.01.2011, 12:08:33 ) *
A nie powinno być po prostu:
[JAVASCRIPT] pobierz, plaintext
  1. $('idDivElement').addEvent( 'mouseleave', $clear(fAkcja) );
[JAVASCRIPT] pobierz, plaintext
?

nie zadziałało,


ale chyba sobie poradziłem,
zrobiłem:
[JAVASCRIPT] pobierz, plaintext
  1. var timer;
  2.  
  3. var fAkcja = function(){
  4. alert('wyświetlam komunikat!');
  5. }
  6.  
  7. $('idDivElement').addEvent('mouseenter', function(){ // akcja wywoływana po najechaniu kursorem na element o ID "idDivElement"
  8. $clear(timer)
  9. timer = fAkcja.delay(2000);
  10. })
[JAVASCRIPT] pobierz, plaintext
thek
Swoją drogą patrząc na same docs to widzę, że można by to skrócić do
[JAVASCRIPT] pobierz, plaintext
  1. var fAkcja = function(){ alert('wyświetlam komunikat!') }.delay(2000);
  2. $('idDivElement').addEvent('mouseenter', fAkcja);
  3. $('idDivElement').addEvent('mouseleave', $clear(fAkcja) );
[JAVASCRIPT] pobierz, plaintext
Od razu mówię... Z MooTools to mój pierwszy w życiu skrypt i to napisany tylko na podstawie dokumentacji, bez uruchomienia i przetestowania gdziekolwiek biggrin.gif

EDIT:

Twój nie działa gdy wyjdziesz i poczekasz, bo brak mouseleave zdefiniowanego. Weź to co poniżej. Właśnie sobie skrypt przetestowałem...
[JAVASCRIPT] pobierz, plaintext
  1. var timer;
  2. var fAkcja = function(){ alert('wyświetlam komunikat!') };
  3. $('idDivElement').addEvent('mouseenter', function() { timer = fAkcja.delay(2000) });
  4. $('idDivElement').addEvent('mouseleave', function() { $clear(timer) } );
[JAVASCRIPT] pobierz, plaintext
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.