wykonywanie mouseleave względem click

0

Witam,
nie jestem zbyt biegły w jQuery, ale podstawowe zmiany css czy animacje mam opanowane. Natomiast mam problem w tym że jak mam taki sam element, i jeśli klikniemy w niego to żeby się nie wykonywał mouseleave, inaczej niech się wykonuje. Próbowałem różnymi sposobami to zrobić lecz nie dało to takich efektów jakich bym chciał.

Inaczej mówiąc, mam element który się animuje przy najeździe i opuszczeniu kursorem, a gdy w niego klikniemy także się animuje ale chcę żeby mouseleave zostało zignorowane bo inaczej animacja nie wykona się do końca przy przypadkowym opuszczeniu elementu.

Przykładowy jeden ze sposobów:

$("#a1,#a2,#a3,#a4,#a5").mouseenter(function(){
			
			$(this).click(function(){
				...
			}).not(function(){
				$(this).mouseleave...
			});
		});

z góry dzięki za pomoc

0

A nie możesz "click" zrobić osobno z "mouseenter"?
W tym momencie bindujesz zdarzenie click po mouseenter i nie bardzo widzę w tym sens.
W ogóle jakieś to nie bardzo jest.

0

mogę tak zrobić ale co mi to da? nic, dalej nie będzie tak jak chce
nie sugerujcie się tym kodem, bo już dziesiątki różnych ustawień i sposobów próbowałem i nic..

chciałem tylko przybliżyć o co chodzi w moim problemie

i trochę źle napisałem w pierwszym poście,
bo tak samo mouseleave jak i mouseenter muszą być zależne od click, czyli w czasie gdy wykonywane są animacje z "click" to nie mogą się wykonywać zdarzenia, mouseleave oraz mouseenter. Tylko własnie nie wiem jak je na ten czas zablokować/zignorować/czy jak to tam nazwać.

0

czemu np. gdy usuwam klase, to jQuery dalej wykonuje zdarzenia na tych elementach ?
może robię coś źle, ja już sam nie wiem, prosta rzecz a nie mogę rozkminić..

$("#a1,#a2,#a3,#a4,#a5").click(function(){
			$("#a1,#a2,#a3,#a4,#a5").removeClass("czy_klik");
			$(this)...
				$(this)...
					$(this)...
						$(this)...
						$("#a1,#a2,#a3,#a4,#a5").addClass("czy_klik");
					}});
				}});
			}});
		});
		
		$(".czy_klik").mouseenter(function(){
			...
		});
		$(".czy_klik").mouseleave(function(){
			...
		});
0

co to w ogóle jest? : D
a czemu ma nie wykonywać? co ma przypisana klasa do przypisanych zdarzeń? próbujesz wykorzystać klasy jak zmienną boolean? czegoś takiego jeszcze nie widziałem
mouseenter, click i mouseleave przypisują tylko funkcje do zdarzenia - robią to jednorazowo i nie sprawdzają potem co chwilę czy elementy nadal spełniają warunki takie jak przy przypisywaniu zdarzeń a w przeciwnym wypadku nie usuwają im tych zdarzeń
przypisane zdarzenia się usuwa ręcznie ale nie będę pisał jak bo tego tu nie potrzebujesz a i tak masz jak widzę problem z ogarnięciem prostszych rzeczy

napisz co chcesz zrobić i nie pokazuj tu jakiegoś dziwnego pseudokodu

0

użyj live jak chcesz w ten sposób traktować przypisywanie zdarzeń.
ale generalnie masz skopane całe rozumowanie i tylko dorabiasz sobie problemów.
najlepiej to pokaż jakiś pełny przykład, wrzuć na jsbin.com i będziemy dumać, pokazujesz jakieś wyrywki dziwne, sam nie potrafisz dobrze tego opisać i jest problem, żeby Ci pomóc..

0

ok, jeszcze raz opiszę co chcę zrobić.

mam pewne elementy, które się animują po najeździe i po opuszczeniu kursora myszki.
i jest wszystko OK, ale możemy także kliknąć w te elementy które także się na własny sposób animują, animacja trwa około 2s, tylko że w czasie jej trwania jeśli poruszymy myszką, opuścimy element lub najedziemy na inny, to ta animacja zostaje przerwana i zostają wykonane te mouseleave oraz mouseenter.

dlatego chcę zrobić tak że po kliknięciu w element, były ignorowane zdarzenia (animacje) z mouseleave oraz mouseenter na dany element.

jeśli jakaś część jest niezrozumiała to spróbuje to jakoś inaczej opisać :)
ale myślę że napisałem to zrozumiale.
moje przykłady mało tu dadzą jak widzę że każdy się dziwi co to za sposoby hehe
a miałem ich sporo, dlatego tu poprosiłem o pomoc.

1

no to masz, kodem w Twoim stylu:

$('element').click(animacja1);
$('element').mouseover(animacja2);
$('element').mouseleave(animacja3);

function animacja1() {
  $(this).unbind('mouseover', animacja2);
  $(this).unbind('mouseleave', animacja3);
  $(this).animate({ ... }, 1000, function() {
    $(this).mouseover(animacja2);
    $(this).mouseleave(animacja3);
  });
}

Coś takiego.

Kod będzie trochę dłuższy jeżeli zamierzasz też blokować animacje na click, kiedy trwa jeszcze animacja z mouseover.
Jeżeli przypisujesz tylko jeden handler danego zdarzenia to możesz pominąć podawanie nazwy funkcji w unbind.
Nie używałem funkcji anonimowych (z wyjątkiem callbacka po zakończeniu animacji), żeby było przejrzyściej i można było rozdzielić funkcje, jeżeli używasz więcej niż jednej pod dane zdarzenie.

Jeżeli to rozwiązanie Ci nie odpowiada to podaj przykład, bo więcej wróżkować dla Ciebie nie będę

0

a co to za animacje? moim zdaniem powinieneś je po prostu kolejkować - czyli w przypadku kliknięcia i opuszczenia elementu wykona się animacja kliknięcia a po jej zakończeniu wyświetli się animacja mouseleave

0

WIELKIE dzięki #dzek69, własnie o to chodziło, szukałem czegoś takiego jak .unbind :) nie wiem czemu się na to nie natknąłem w dokumentacji
teraz jeszcze użyłem .off z nowszej wersji

kolejkowanie nic by nie dało

1 użytkowników online, w tym zalogowanych: 0, gości: 1