delay()Метод delay() используется для создания временной паузы
между действиями в цепочке анимаций. Этот метод особенно полезен, когда
необходимо последовательно выполнить несколько анимаций с интервалами
времени между ними. Метод применяется только к очереди
анимаций и не влияет на другие события или функции вне
анимационной очереди.
Синтаксис:
$(селектор).delay(время, очередь);
время — длительность задержки в миллисекундах
(обязательный параметр).очередь — имя очереди, в которой будет выполняться
задержка. По умолчанию используется очередь "fx" для
стандартных анимаций.Пример:
$("#box")
.slideUp(1000)
.delay(500)
.slideDown(1000);
В этом примере блок сначала скрывается за 1 секунду, затем происходит пауза в 0.5 секунды, после чего блок снова появляется за 1 секунду.
queue()jQuery использует систему очередей для управления последовательностью
выполнения функций. Каждому элементу соответствует своя очередь с именем
"fx" по умолчанию.
Метод queue() позволяет управлять этой очередью:
$(селектор).queue(очередь, функция);
очередь — имя очереди (по умолчанию
"fx").функция — функция, которая будет добавлена в очередь.
Функция получает аргумент next, вызываемый для перехода к
следующему элементу очереди.Пример использования с задержкой:
$("#box").queue(function(next) {
$(this).css("background-color", "red");
setTimeout(next, 1000); // ручная задержка 1 секунда
});
Здесь изменение цвета произойдет, после чего через 1 секунду очередь продолжится.
delay() от
setTimeout()delay() работает только в рамках анимационной
очереди jQuery, тогда как setTimeout() создаёт
независимую задержку в выполнении кода. Использование
delay() обеспечивает согласованное выполнение нескольких
анимаций и позволяет управлять их последовательностью без вложенных
колбэков.
Пример различия:
// delay внутри анимации
$("#box").slideUp(500).delay(1000).slideDown(500);
// setTimeout вне анимации
setTimeout(function() {
$("#box").slideDown(500);
}, 1000);
В первом случае анимации идут строго последовательно, во втором — управление временной задержкой производится вне цепочки анимаций.
Метод stop() позволяет прерывать текущую анимацию и
очищать очередь. Если нужно отменить задержку, добавленную с помощью
delay(), можно использовать:
$("#box").stop(true);
true очищает очередь, включая задержки, а
false останавливает только текущую анимацию.$("li").each(function(index) {
$(this).delay(200 * index).fadeIn(500);
});
delay() для показа подсказок или временных эффектов:$("#tooltip")
.fadeIn(300)
.delay(2000)
.fadeOut(300);
queue() Управление
кастомными очередями и добавление собственных функций с задержкой:$("#box").queue("custom", function(next) {
$(this).css("color", "blue");
setTimeout(next, 500);
}).queue("custom", function(next) {
$(this).css("color", "green");
next();
}).dequeue("custom");
delay() только в
рамках анимаций, чтобы не нарушать логику выполнения основного
кода.queue() с явным вызовом next().Задержки в jQuery — это инструмент, позволяющий управлять временем
между действиями анимаций. Метод delay() интегрирован с
очередью анимаций "fx", обеспечивая простое и
последовательное выполнение визуальных эффектов. Для более точного
контроля используется система очередей с методами queue() и
dequeue(), позволяющая комбинировать анимации и кастомные
функции с временными паузами.