2011-07-08 9 views
5

Próbuję zrobić proste klasy fadeIn() CSS na niektórych obiektach, które mają klasę "przycisk". Chcę zaniknąć w klasie "hoverbutton" po najechaniu kursorem, a następnie fadeOut, gdy mysz opuści przedmiot.jQuery fadeIn CSS klasa

Znalazłem to w pytaniach. Wydawało się, że działa dobrze, dopóki nie zauważyłem, gdy najechałem na wiele przycisków, niektóre z nich utknęły w klasie "hoverbutton". Nie mam pojęcia, jak to naprawić. Wszelkie sugestie byłyby świetne.

$('.button').hover(function(){ 
    $(this).addClass('hoverbutton', 200); 
}, function(){ 
    $(this).removeClass('hoverbutton', 200); 
}); 

wydaje się utknąć kiedy unoszą się nad jednym i szybko przeskoczyć do innego elementu z tej klasy przed zanikaniem na pierwszym jest kompletny.

stop() przyniosły taki sam wynik. Klasa unosić nadal utknie

$('.button').hover(function(){ 
    $(this).stop().addClass('hoverbutton', 200); 
}, function(){ 
    $(this).stop().removeClass('hoverbutton', 200); 
}); 
+1

I don” t think ', 200' jest poprawnym argumentem dla' removeClass' i 'addClass' – kei

+0

@kei - jQueryUI dodaje czas trwania do 'addClass' i' removeClass': http://jqueryui.com/demos/addClass/ – Andrew

Odpowiedz

2

Problemem jest to, ponieważ jQueryUI wykorzystuje właściwość style zrobić animację, a jeśli tak nie jest kompletna (ponieważ występuje hover przed hover w kończy) klasa, do której jest animowana, nie jest dodawana, więc nie można jej usunąć za pomocą dymka.

Aby rozwiązać ten problem, musimy zrobić dwie rzeczy na najechania-out:

  • zatrzymać animację addClass()
  • usunięcia wszelkich tymczasowych styl stworzony przez addClass() animacji

Podobnie jak ..

$('.button').hover(function() { 
    $(this) 
     .addClass('hoverbutton', 200); 
}, function() { 
    $(this).stop() 
     .attr("style", "") 
     .removeClass('hoverbutton', 200); 
}); 

Oto przykład: http://jsfiddle.net/RBTT8/

0

Spróbuj zatrzymać kolejkę animacji:

$('.button').hover(function(){ 
    $(this).stop().addClass('hoverbutton', 200); 
}, function(){ 
    $(this).stop().removeClass('hoverbutton', 200); 
}); 
0

Zapoznaj się z dokumentacją stop(). Można by dodać go do wywołania tak:

$('.button').hover(function(){ 
    $(this).stop().addClass('hoverbutton', 200); 
}, function(){ 
    $(this).stop().removeClass('hoverbutton', 200); 
}); 
+0

dzięki za odpowiedź, ale to nie zadziałało – David