Próbuję uruchomić animację tylko wtedy, gdy mysz znajduje się nad obiektem. Mogę uzyskać jedną iterację animacji, a następnie ustawić ją ponownie na normalną po wyjęciu myszy. Ale chciałbym, żeby animacja zapętlała się po najechaniu myszą. Jak to zrobić, używając setInterval? Trochę utknąłem.Ciągła animacja jQuery na mouseover
Odpowiedz
można to zrobić tak:
$.fn.loopingAnimation = function(props, dur, eas)
{
if (this.data('loop') == true)
{
this.animate(props, dur, eas, function() {
if($(this).data('loop') == true) $(this).loopingAnimation(props, dur, eas);
});
}
return this; // Don't break the chain
}
Teraz można to zrobić:
$("div.animate").hover(function(){
$(this).data('loop', true).stop().loopingAnimation({ left: "+10px"}, 300);
}, function(){
$(this).data('loop', false);
// Now our animation will stop after fully completing its last cycle
});
Jeśli chciałeś animacji natychmiast przystanek, można zmienić linię hoverOut
czytać :
$(this).data('loop', false).stop();
setInterval
zwraca identyfikator, który można przekazać do clearInterval
, aby wyłączyć timer.
można napisać następujące:
var timerId;
$(something).hover(
function() {
timerId = setInterval(function() { ... }, 100);
},
function() { clearInterval(timerId); }
);
Rozważmy:
<div id="anim">This is a test</div>
z:
#anim { padding: 15px; background: yellow; }
oraz:
var over = false;
$(function() {
$("#anim").hover(function() {
over = true;
grow_anim();
}, function() {
over = false;
});
});
function grow_anim() {
if (over) {
$("#anim").animate({paddingLeft: "100px"}, 1000, shrink_anim);
}
}
function shrink_anim() {
$("#anim").animate({paddingLeft: "15px"}, 1000, grow_anim);
}
Można to osiągnąć również za pomocą timerów.
Fajne rozwiązanie. Wciąż jestem nowicjuszem w JS. Jak zrobić ten rodzajowy, więc gdybym miał kilka animów, założyłbym, że przekazałbym identyfikator w funkcji, a następnie zadzwoniłbym za każdym razem dla każdego typu? czy funkcja function() może tam przyjmować parametry, i czy nazwałabym to dla każdego rodzaju, czy to naprawdę najlepsze rozwiązanie? –
Musiałem to do pracy dla więcej niż jednego obiektu na stronie, więc trochę zmodyfikowana Cletus za kod:
var over = false;
$(function() {
$("#hovered-item").hover(function() {
$(this).css("position", "relative");
over = true;
swinger = this;
grow_anim();
}, function() {
over = false;
});
});
function grow_anim() {
if (over) {
$(swinger).animate({left: "5px"}, 200, 'linear', shrink_anim);
}
}
function shrink_anim() {
$(swinger).animate({left: "0"}, 200, 'linear', grow_anim);
}
- 1. Shift + mouseover z jQuery
- 2. jquery draggable i mouseover
- 3. Jquery: zdarzenie mouseover na obszarze mapy obrazu
- 4. mouseover jQuery działa na odsunięciu myszy
- 5. jQuery przełącz na mouseover - zapobiec kolejce
- 6. Knockoutjs bind mouseover lub Jquery
- 7. jQuery: animowana, ciągła pętla przez dzieci
- 8. jQuery Animacja wyściółka Zero
- 9. Animacja synchroniczna JQuery
- 10. jQuery animacja zmiany koloru
- 11. jQuery animacja ładowania tekst
- 12. mouseover() mouseout() jQuery dodaj/removeClass problem
- 13. jQuery Tab Fade Animacja
- 14. animacja pozycji jQuery Ui()
- 15. jQuery animacja przełączania
- 16. Animacja: jQuery lub Raphael?
- 17. Jak dodać/usunąć klasę na mouseOver/mouseOut - JQuery .hover?
- 18. Dodaj zawartość na myszy mouseover
- 19. Pomoc JQuery - animacja koloru tła
- 20. Glitchy animacja tekstu w jQuery
- 21. jQuery slideDown() animacja nie działa
- 22. jQuery Animacja vs GreenSock TweenMax
- 23. Animacja jQuery: Ignoruj podwójne kliknięcie
- 24. jQuery Hover animacja zmiana obrazu
- 25. d3 - wyzwalanie zdarzenia mouseover
- 26. Jquery - Animacja do wysokości: auto
- 27. Animacja jQuery - płynne przenoszenie rozmiaru
- 28. Jak robi się animacja JQuery?
- 29. Wymiana MouseOver z .hoverIntentem
- 30. Animacja jQuery + Animate.css działa tylko raz, animacja nie resetuje się
Musiałem zmienić moją odpowiedź z powodu problemów wtih rekurencji. Nie mogę ci dać odpowiedzi na pracę z metodą loopingAnimation - jeśli zmienię ją na "animate", wykonuje jedną iterację. –
Doug, * animate * brakowało nawiasu zamykającego, więc dodałem go, ale nie było to wystarczające do zapisania, ponieważ potrzebujesz co najmniej 6 modyfikacji znaków, więc nacisnąłem twój kod w tym celu. FYI. –