Остановить запуск событий jQuery во время текущего запуска? - PullRequest
4 голосов
/ 14 мая 2011

Меня это очень раздражает! По сути, у меня есть div, у которого в конечном итоге будет маленькое меню, и когда вы наводите курсор мыши на другой div, этот маленький div перемещается вниз и становится видимым (mouseout вызывает противоположное).

Все это работает очень хорошо, за исключением того, что при наведении курсора и наведении мыши очень быстро происходит мигание (я полагаю, очередь jQuery догоняет).

Так в принципе, есть ли способ остановить это? Можете ли вы сказать jQuery что-то вроде «на данный момент, не ставьте в очередь больше ничего, пока не закончится текущая очередь»?

Я все еще относительно новичок в jQuery. Мой код ниже выглядит так, как будто он должен работать, но, похоже, не останавливает добавление в очередь! Пожалуйста, простите за глупое использование x ++ / y ++ совершенно излишне в этой ситуации, это было последнее, что я пробовал перед публикацией здесь.

Кто-нибудь может помочь?

var x = 0;
var y = 0;

function hideme()
{
    if (x == 0 && y == 0)
    {
        x++;
        $(unimenu).fadeOut('slow');
        $(unimenu).animate({top: "-40px" }, {queue: false, duration: 'slow'});
        x = 0;
    }
}

function showme()
{
    if (y == 0 && x == 0)
    {
        y++
        $(unimenu).fadeIn('slow');
        $(unimenu).animate({top: "40px" }, {queue: false, duration: 'slow'});
        y = 0;
    }
}

Ответы [ 3 ]

2 голосов
/ 14 мая 2011

Я думаю, что вы ищете stop.stop остановит предыдущую анимацию.Если вы остановите предыдущую анимацию перед тем, как начать следующую, вы избежите очереди множества анимаций, которые вызывают вашу проблему.,Смотрите эту модифицированную версию этого демо с остановкой.Обратите внимание, как это не имеет проблемы:

http://jsfiddle.net/WskXt/

0 голосов
/ 14 мая 2011

Может быть, загляните в плагин hoverIntent. http://cherne.net/brian/resources/jquery.hoverIntent.html

0 голосов
/ 14 мая 2011

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

Найдите на этой странице queue: http://api.jquery.com/animate/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...