Как заставить ‹div› .slideUp работать с .delay() в другом месте

Извините за плохое название, нелегко объяснить в такой короткой области.

Что я пытаюсь сделать: у меня есть небольшая панель уведомлений, которая скользит вниз с верхней части моего сайта, когда вы переходите по ссылке, когда вы не вошли в систему. Она просто говорит: «Вы не можете идти сюда». хитрым способом. Как только вы щелкнете по нему, он скользит вниз, затем с помощью .delay() он ждет 2500 мс, а затем снова скользит вверх. Я бы хотел, чтобы, если вы нажмете новый, он отменит задержку и сразу же поднимет старый и снизит новый.

Проблема в том, что если вы снова и снова нажимаете кнопку, чтобы вывести уведомление, оно будет ждать окончания .delay, прежде чем перейти к следующему, таким образом создавая бесконечный поток уведомлений, которые вам придется ждать. Мне бы хотелось, чтобы, когда вы нажимаете на новую вкладку, она останавливала .delay и сразу же переходила туда, чтобы у вас не было задержки, если вы навязчивы или случайно нажали.

Мой сайт: http://thenozzle.net/

Уведомление появляется, когда вы нажимаете ссылки «игры», «проекты», «конкурсы» или «форумы» в строке меню.

Javascript:

function notifyevent(){
    $('#subscribercontent').slideUp('fast');
    $('#subscribercontent').slideDown('fast').delay(2500).slideUp('fast')
}

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

Спасибо!


person alt    schedule 17.06.2011    source источник
comment
см. api.jquery.com/stop   -  person js1568    schedule 17.06.2011
comment
@ js1568 stop остановит только анимацию, а не задержку, по крайней мере, я вижу   -  person locrizak    schedule 17.06.2011
comment
Он не работал слишком хорошо, он немного прыгал взад и вперед, как будто его заклинило.   -  person alt    schedule 17.06.2011
comment
Да, .stop() прерывает задержку, когда вы нажимаете, прежде чем .delay может завершиться.   -  person alt    schedule 17.06.2011


Ответы (1)


Я решил это, на самом деле, благодаря комбинации ответов.

function notifyevent(){
    $('#searchoverflow').slideUp('fast');
    $('#subscribercontent').slideUp('fast');
    $('#subscribercontent').slideDown('fast');
    setTimeout("$('#subscribercontent').stop(true,true).slideUp('fast');", 3000)
}

Я использую setTimeout вместо задержки, затем я использую .stop() не для остановки задержки, а для остановки анимации до истечения времени ожидания. Если кто-нибудь знает лучший способ, это было бы здорово, способ как бы уничтожает таймер, если вы нажмете спам, и люди будут делать это.

person alt    schedule 17.06.2011