Как остановить все предыдущие анимации в jQuery перед выполнением новой?

Я просто экспериментирую с JQuery.

у меня есть изображение, которое исчезает в другое изображение, как mouseOver() возникает и исчезает обратно на mouseOut()

он отлично работает, за исключением того, если вы перемещаете мышь по ссылке снова и снова, скажем, 5 раз, изображение исчезает и снова, 5 раз, пока вы просто сидите там и ждете, пока он покончит с этим сумасшедшим поведением.

чтобы остановить это поведение, я попытался использовать флаг и запустить анимацию Только если это уже не анимация, но, угадайте, что? Если, скажем, у меня есть 4 такие кнопки, и на каждой кнопке мыши я затухаю в другом изображении, эта анимация будет проигнорирована, так как флаг false.

итак, есть ли способ остановить все предыдущие анимации перед выполнением новых? Я говорю о нормальном fadeIn() и slideDown() функции в JQuery


EDIT: добавление кода из ссылка на сайт.

<a href="javascript:void(0);" onMouseOver="mouseOverOut(false);" onMouseOut="mouseOverOut(true);">Tick</a>

в JavaScript

function mouseOverOut(t)
{
    if(t)
    {
        $('.img1').fadeIn();
        $('.img2').fadeOut();
    }
    else
    {
        $('.img1').fadeOut();
        $('.img2').fadeIn();
    } 
}

3 ответов


используя .stop() С fadeIn/Out может привести к непрозрачности застрять в частичном состоянии.

одним из решений является использование .fadeTo() вместо этого, что дает абсолютное назначение для непрозрачности.

function mouseOverOut(t) {
    if(t) {
        $('.img1').stop().fadeTo(400, 1);
        $('.img2').stop().fadeTo(400, 0);
    }
    else {
        $('.img1').stop().fadeTo(400, 0);
        $('.img2').stop().fadeTo(400, 1);
    } 
}

вот более короткий способ написания.

function mouseOverOut(t) {
    $('.img1').stop().fadeTo(400, t ? 1 : 0);
    $('.img2').stop().fadeTo(400, t ? 0 : 1);
}

или это может работать. Но сначала проверьте.

function mouseOverOut(t) {
    $('.img1').stop().fadeTo(400, t);
    $('.img2').stop().fadeTo(400, !t);
}

EDIT: этот последний, кажется, работает. Значение true / false переводится на 1/0. Вы также можете использовать .animate() непосредственно.

function mouseOverOut(t) {
    $('.img1').stop().animate({opacity: t});
    $('.img2').stop().animate({opacity: !t});
}

вы уже пробовали stop () ?

описание: остановите текущую анимацию на соответствующих элементах.


С помощью .stop()