Метод queue - работа с очередью функций

Метод ⁅с⁆queue⁅/с⁆ позволяет нам работать с очередью функций, привязанных к элементу. Смотрите также метод ⁅с href="/ru/javascript/lib/jquery/manual/clearQueue/"⁆clearQueue⁅/с⁆, который позволяет нам удалить из очереди все функции, которые не были запущены.

Синтаксис

Так мы показываем очередь выполняемых функций, привязанных к элементу. Можно передать необязательным параметром название очереди в виде строки (по умолчанию fx - стандартная очередь эффектов):

.queue([имя очереди]);

Мы можем манипулировать очередью. Выполняется один раз для каждого элемента. Для этого можно передать вторым параметром массив функций, которые заменят содержание текущей очереди:

.queue([имя очереди], новая очередь );

А можно вторым параметром передать новую callback-функцию для добавления в очередь. Эта функция в свою очередь получает другую функцию в качестве параметра. Это позволяет автоматически убирать из очереди следующий элемент и двигать очередь:

.queue([имя очереди], callback-функция(next) { next(); });

Каждый элемент может иметь одну или несколько очередей. Во многих приложениях используется только одна (fx). Очереди позволяют осуществлять последовательность действий с элементом асинхронно, без прерывания выполнения программы. Вызов ⁅с⁆queue⁅/с⁆ c callback-функцией позволяет нам поместить новую функцию в конец очереди. callback-функция выполняется один раз для каждого элемента в наборе. При добавлении функции с помощью ⁅с⁆queue⁅/с⁆, мы должны убедится, что потом будет вызван метод ⁅с href="/ru/javascript/lib/jquery/manual/hide/"⁆dequeue⁅/с⁆, для того чтобы следующая функция в цепочке заработала.

Пример

Давайте добавим пользовательскую функцию. Сначала, после нажатия на #animate, мы покажем красный квадрат, который будет двигаться вправо в течение , затем при помощи ⁅с⁆queue⁅/с⁆ мы добавим пользовательскую функцию, которая перекрасит квадрат в зеленый, добавив класс newcolor. Как видите, затем здесь вызывается ⁅с⁆dequeue⁅/с⁆, чтобы убрать функцию из очереди. Затем наш квадрат будет двигаться влево полсекунды и перекрасится обратно в красный - при помощи второй пользовательской функции мы убираем класс newcolor. По окончанию анимации мы сворачиваем наш квадрат:

<button id="animate">start</button> <div></div> div { position: absolute; margin: 3px; width: 50px; height: 50px; left: 0px; top: 30px; background: red; display: none; } div.newcolor { background: green; } $('#animate').click(function() { $('div') .show('slow') .animate({left: '+=200'}, 2000) .queue(function() { $(this).addClass('newcolor').dequeue(); }) .animate({left: '-=200'}, 500) .queue(function() { $(this).removeClass('newcolor').dequeue(); }) .slideUp(); });

Пример

Давайте добавим очередь в виде массива, чтобы удалить предыдущую. При нажитии на кнопку #start мы будем видеть анимацию из предыдущего примера. При нажатии на кнопку #stop мы будем останавливать анимацию путем добавления пустого массива. При повторном нажатии на #start анимация будет начинаться заново:

<button id="start">start</button> <button id="stop">stop</button> <div></div> div { position: absolute; margin: 3px; width: 50px; height: 50px; left: 0px; top: 30px; background: red; display: none; } div.newcolor { background: green; } $('#start').click(function() { $('div') .show('slow') .animate({left: '+=200'}, 5000) .queue(function() { $(this).addClass('newcolor').dequeue(); }) .animate({left: '-=200'}, 1500) .queue(function() { $(this).removeClass('newcolor').dequeue(); }) .slideUp(); }); $('#stop').click(function() { $('div').queue('fx', []).stop(); });

Смотрите также

  • метод animate,
    который анимирует свойства элементов
  • метод clearQueue,
    который позволяет удалить все невыполненные элементы из очереди функций
  • метод dequeue,
    который позволяет выполнить следующую функцию в очереди функций



Чат с GPT Компилятор