Как очистить (удалить) все поставленные в очередь функции в jquery?
Я хотел бы знать, как очистить (удалить) все функции из очереди в jquery?. Это код, который у меня есть:
var a = $('<div class="notification" style="bottom:'+ind+'px">Message envoyé '+i+'<span class="close">x</span></div>')
.fadeIn(1000,"linear").delay(5000).fadeOut(3000,"linear");
Я хотел бы удалить функции "fadeIn", "delay" и "fadeOut". Я попытался с dequeue() и clearQueue(), но это не сработало правильно. Так как это сделать?
Заранее спасибо.
1 ответ
Как только вы запустили анимацию, вы можете остановить ее и очистить любые другие анимации, поставленные в очередь, вызвав это для объектов, которые анимируют:
$(yourobj).stop(true);
Или, в вашем случае (так как объект jQuery находится в переменной a
, это было бы:
a.stop(true);
Как вы можете видеть из документа JQuery для.stop()
, первый аргумент говорит ему очистить очередь от любых других анимаций, которые стоят в очереди, чтобы идти.
Обратите внимание, что ваш код сам по себе не завершен, потому что вы создали некоторые элементы DOM, но не добавили их на страницу, поэтому они не будут видны, пока вы не сделаете это. Я предполагаю, что у вас есть этот код, но просто не включили его.
Если то, что вы действительно пытаетесь сделать, это:
- Всплывающее окно, которое, если его оставить, исчезнет само по себе, останется на экране в течение определенного времени, а затем исчезнет.
- Если в любое время, пока всплывает пузырь, пользователь наводит на него курсор, вы хотите настроить его на полную непрозрачность и остановить любую анимацию, чтобы она оставалась навсегда до тех пор, пока мышь находится над ним.
Затем, если мышь вывести из нее, вы хотите, чтобы она некоторое время оставалась на экране, а затем исчезала.
var a = $('<div class="notification" style="bottom:'+ind+'px">Message envoyé '+i+'<span class="close">x</span></div>') .fadeIn(1000,"linear").delay(5000) .fadeOut(3000, "linear", function() { $(this).remove(); }) .mouseover(function() { $(this).stop(true).css("opacity", 1); }).mouseleave(function() { $(this).delay(2000).fadeOut(3000, "linear", function() { $(this).remove(); }); }); $('body').append(a);
Вы можете увидеть это в действии здесь: http://jsbin.com/ziwexifo/1/edit
В вашем коде jsBin я, честно говоря, понятия не имею, что вы пытаетесь сделать с .promise().done()
код, потому что я нахожу имена переменных не описательными, поэтому они не помогают мне понять, что вы пытаетесь сделать, и нет комментариев. Если вы собираетесь использовать .stop()
чтобы преждевременно отменить последовательность анимации, вам, вероятно, придется сделать что-то другое, чем использование .promise().done()
для всей работы по уборке. Я использовал функции завершения анимации в своем коде.
Длинный ответ (для глубокого недооценки)
ВАЖНЫЙ! этот ответ - длинный. и вовсе не означает замену лучшего Краткого ответа. А скорее как понимание этого больше, играя с демкой.
Итак, во-первых...
Я основываю лучшую демонстрацию по следующей ссылке на сайт jQuery: jQuery.finish()
Поэтому, пожалуйста, цените свое время, если вам просто нужно завершить проект как можно скорее. и, конечно же, вы можете вернуться к нему в любое время, так как я тоже делал только для себя. что тоже очень хорошая (будущая) ссылка.
Это очень хороший демонстрационный пример во всех возможных сценариях. (во всяком случае, по моему скромному мнению)
Кроме того, эта ссылка jQuery .clearQueue может действительно лучше прояснить ситуацию, поскольку "Все" или "Большинство" этих функций API так или иначе связаны! (НЕ на 100% точен, но помните.) Так что не обманывайтесь мной (у меня еще нет опыта со всеми этими)
Когда вызывается метод.clearQueue(), все функции в очереди, которые не были выполнены, удаляются из очереди. При использовании без аргумента.clearQueue() удаляет оставшиеся функции из fx, стандартной очереди эффектов. В этом смысле он похож на.stop (true). Однако, хотя метод.stop () предназначен для использования только с анимацией, .clearQueue() также можно использовать для удаления любой функции, которая была добавлена в общую очередь jQuery с помощью метода.queue ().
От себя лично: я просто искал хороший скроллер (да, старый Marquee) и в итоге запустил его без плагинов (не сначала, не нашел хорошего. И только с jQuery это очень просто), но только с функцией jQuery.animate(), которая помогала мне. (Хорошая работа, сообщество jQuery!!)
проблема, с которой я столкнулся, заключается в том, что после использования setTimeout и функции, которая вызывает ее, поэтому анимация будет повторять бесконечность, я в конечном итоге запустил несколько анимаций одновременно (через некоторое время) и мне нужно было все сбросить. поэтому clearTimeout (для setTimeout) и.stop (true) для.animate () действительно помогли мне! после этого я мог перезапустить его столько раз, сколько хотел, и теперь я знаю, что анимации еще нет в эфире!