jQuery метод .stop()

jQuery эффекты

Определение и применение

jQuery метод .stop() позволяет остановить выполняемую анимацию у выбранных элементов.


Обращаю Ваше внимание, что вы можете остановить все анимации глобально, для этого необходимо установить свойство глобального объекта $.fx.off в логическое значение true. Когда это будет сделано, все методы анимации немедленно установят элементы в их окончательное состояние при вызове (без отображения эффекта анимации).

Кроме того, вы можете воспользоваться методом .finish(), который останавливает все выполняющиеся в настоящее время анимации, удаляет все очереди анимаций, и завершает все анимации для выбранных элементов, это аналогично вызову метода .stop( true, true ).


jQuery синтаксис:

Синтаксис 1.2:
$( selector ).stop( clearQueue, jumpToEnd ) 

Синтаксис 1.7:
$( selector ).stop( queue, clearQueue, jumpToEnd ) 

queue - String
clearQueue - Boolean
jumpToEnd - Boolean

Если для одного и того же элемента вызывается несколько методов анимации, то более поздние анимации помещаются в очередь эффектов для элемента. Эти анимации не будут начинаться до тех пор, пока не завершится первая. Когда вызывается метод .stop(), то следующие анимации в очереди начинается немедленно. Это поведении можно отключить используя параметр clearQueue с логическим значением true, в этом случае последующие анимации будут удалены из очереди и никогда не будут выполнены.

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

Начиная с версии jQuery 1.7, если первый параметр задан в виде строки, то будет остановлена только та анимация в очереди, которая соответствует этой строке. Вы можете ознакомиться с подобным примером ниже.

Добавлен в версии jQuery

1.2 (синтаксис обновлен в версии 1.7)

Значения параметров

ПараметрОписание
queueСтроковое значение, определяющее имя очереди, в которой необходимо остановить анимацию. По умолчанию используется очередь стандартных эффектов fx. Необязательный параметр.
clearQueueЛогическое значение, которое определяет следует ли удалить последующие анимации, находящиеся в очереди. Значение по умолчанию false. Необязательное значение.
jumpToEndЛогическое значение, которое определяет следует ли немедленно завершить текущую анимацию. Значение по умолчанию false. Необязательное значение.

Пример использования

<!DOCTYPE html>
<html>
	<head>
		<title>Использование jQuery метода .stop()</title>
		<style></style>
		<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
		<script>
	$( document ).ready(function(){
	  $( ".fwd" ).click(function(){ // задаем функцию при нажатии на элемент с классом fwd 
	    $( "div" ).animate({left: "+=200px"}, 3500); // анимируем смещение элемента относительно документа
	  });
	  $( ".back" ).click(function(){ // задаем функцию при нажатии на элемент с классом back 
	    $( "div" ).animate({left: "-=200px"}, 3500); // анимируем смещение элемента относительно документа
	  });
	  $( ".stop" ).click(function(){ // задаем функцию при нажатии на элемент с классом stop 
	    $( "div" ).stop(); // останавливаем анимацию у выбранных элементов <div>
	  });		
	});
		</script>
	</head>
	<body>
		<button class = "fwd">Вперед</button>
		<button class = "back">Назад</button>
		<button class = "stop">Стоп</button>
		<div></div>
	</body>
</html>

В этом примере мы разместили в документе три кнопки (элементы <button>), для каждой назначили обработчик события "click" (клик левой кнопкой мыши):


Результат нашего примера:

Пример использования jQuery метода .stop()
Пример использования jQuery метода .stop()

Рассмотрим следующий пример в котором мы сравним использование методов .stop() и .finish():

<!DOCTYPE html>
<html>
	<head>
		<title>Пример использования jQuery методов .finish() и .stop()</title>
		<style></style>
		<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
		<script>
	$( document ).ready(function(){
	  // функция выполняющая анимации элемента
	  function first() {
	    $( "div" ).css( "width", "80px" ) // устанавливаем ширину элемента равную 80 пикселей
                      .animate({width: "30%"}, 2000) // анимируем увеличение ширины элемента до 30% за 2 секунды
                      .animate({width: "50%"}, 2000) // анимируем увеличение ширины элемента до 50% за 2 секунды
                      .animate({width: "70%"}, 2000) // анимируем увеличение ширины элемента до 70% за 2 секунды
                      .animate({width: "90%"}, 2000);// анимируем увеличение ширины элемента до 90% за 2 секунды
	  }
	  
	  $( ".start" ).click(function(){ // задаем функцию при нажатии на элемент с классом start 
	    first() // запускаем функцию
	  });
		
	  $( ".finish" ).click(function(){ // задаем функцию при нажатии на элемент с классом finish 
	    $( "div" ).finish(); // останавливаем все выполняющиеся в настоящее время анимации, удаляем все очереди анимаций, и завершаем все анимации 
	  });
		
	  $( ".stop" ).click(function(){ // задаем функцию при нажатии на элемент с классом stop 
	    $( "div" ).stop(); // останавливаем выполняемую анимацию
	  });

	  $( ".stop2" ).click(function(){ // задаем функцию при нажатии на элемент с классом stop2 
	    $( "div" ).stop( true, true ); // останавливаем все выполняющиеся в настоящее время анимации, удаляем все очереди анимаций, и завершаем все анимации 
	  });
	});
		</script>
	</head>
	<body>
		<button class = "start">start</button>
		<button class = "finish">finish()</button>
		<button class = "stop">stop()</button>
		<button class = "stop2">stop( true, true )</button>
		<div></div>
	</body>
</html>

В этом примере мы разместили в документе один элемент <div> и четыре кнопки (элементы <button>), для каждой назначили обработчик события "click" (клик левой кнопкой мыши):

Результат нашего примера:

Пример использования jQuery методов .finish() и .stop()
Пример использования jQuery методов .finish() и .stop()

Рассмотрим следующий пример в котором с помощью метода .stop() мы будем останавливать элемент в зависимости от его имени очереди:

<!DOCTYPE html>
<html>
	<head>
		<title>Использование jQuery метода .stop() (остановка элемента с определенной очередью)</title>
		<style></style>
		<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
		<script>
	$( document ).ready(function(){
	  
	  first(); // вызываем функцию при загрузке документа (добавляем анимацию в очередь)
	  second(); // вызываем функцию при загрузке документа (добавляем анимацию в очередь)

	  $( ".first" ).dequeue( "myElement" ); // выполняем для выбранного элемента функцию из очереди под именем myElement
	  $( ".second" ).dequeue( "myElement2" ); // выполняем для выбранного элемента функцию из очереди под именем myElement2
	  
	  // функция выполняющая анимацию элемента бесконечно в цикле
	  function first() {  
	    $( ".first" ).animate({ width: "90%"}, { // анимируем увеличение ширины элемента
	      queue: "myElement", // задаем имя очереди
	      duration: 1000, // длительность анимации в миллисекундах
	      complete: function(){ // функция будет выполнена после завершения анимации
	        $( this ).animate({ width: "80px"}, { // анимируем уменьшение ширины элемента
	          queue: "myElement", // задаем имя очереди
	          complete: function(){ // функция будет выполнена после завершения анимации
	            first(); // вызываем функцию (добавляем анимацию в очередь)
	            $( ".first" ).dequeue( "myElement" ); // выполняем для выбранного элемента функцию из очереди под именем myElement
	          }
	        })
	      }
	    })
	  };
		
	  // функция выполняющая анимацию элемента бесконечно в цикле
	  function second() {  
	    $( ".second" ).animate({ width: "90%"}, { // анимируем увеличение ширины элемента
	      queue: "myElement2", // задаем имя очереди
	      duration: 1000, // длительность анимации в миллисекундах
	      complete: function(){ // функция будет выполнена после завершения анимации
	        $( this ).animate({ width: "80px"}, { // анимируем уменьшение ширины элемента
	          queue: "myElement2", // задаем имя очереди
	          complete: function(){ // функция будет выполнена после завершения анимации
	            second(); // вызываем функцию (добавляем анимацию в очередь)
	            $( ".second" ).dequeue( "myElement2" ); // выполняем для выбранного элемента функцию из очереди под именем myElement2
	          }
	        })
	      }
	    })
	  };

	  $( ".first" ).click(function(){ // задаем функцию при нажатии на элемент с классом first 
	    if( $( this ).is( ":animated" ) ) { // проверяем анимируется ли в настоящее время элемент
	      return // если да, то выходим из функции
	    } else { // если нет, то
	      first(); // вызываем функцию (добавляем анимацию в очередь)
	      $( ".first" ).dequeue( "myElement" ); // выполняем для выбранного элемента функцию из очереди под именем myElement
	    }
	  });

	  $( ".second" ).click(function(){ // задаем функцию при нажатии на элемент с классом second 
	    if( $( this ).is( ":animated" ) ) { // проверяем анимируется ли в настоящее время элемент
	      return // если да, то выходим из функции
	    } else { // если нет, то
	      second(); // вызываем функцию (добавляем анимацию в очередь)
	      $( ".second" ).dequeue( "myElement2" ); // выполняем для выбранного элемента функцию из очереди под именем myElement2
	    }
	  });

	  $( ".stop" ).click(function(){ // задаем функцию при нажатии на элемент с классом stop 
	    $( "div" ).stop( "myElement" ); // останавливаем анимацию у выбранных элементов <div> у которых имя очереди анимации myElement
	  });

	  $( ".stop2" ).click(function(){ // задаем функцию при нажатии на элемент с классом stop2 
	    $( "div" ).stop( "myElement2" ); // останавливаем анимацию у выбранных элементов <div> у которых имя очереди анимации myElement2
	  });

	  $( ".stop3" ).click(function(){ // задаем функцию при нажатии на элемент с классом stop3  
	    $( "div" ).stop(); // останавливаем анимацию у выбранных элементов <div>
	  });
	});
		</script>
	</head>
	<body>
		<button class = "stop">stop first</button>
		<button class = "stop2">stop second</button>
		<button class = "stop3">stop all</button>
		<div class = "first">first</div>
		<div class = "second">second</div>
	</body>
</html>

В этом примере мы разместили в документе два элемента <div>, которым с помощью метода .animate() анимируем увеличение и уменьшение ширины элемента бесконечно в цикле с помощью функций обратного вызова. Отличие между анимациями заключается только в том, что для элементов назначаются различные имена очередей. Обратите внимание на важный момент, что когда анимации назначается имя очереди, то она не запускается в автоматическом режиме, а запускается с помощью метода .dequeue(), который мы использовали при загрузке документа, после того как были вызваны функции, которые добавили наши анимации в очередь.

Кроме того, мы разместили в документе три кнопки (элементы <button>), для каждой назначили обработчик события "click" (клик левой кнопкой мыши):

Для возможности возобновления анимации (в этом примере анимация всегда возобновляется с увеличения элемента) мы задали функции, которые срабатывают при нажатии на конкретный элемент <div>. Обратите внимание, что при нажатии на элемент происходит проверка того анимируется ли элемент в настоящее время.

Результат нашего примера:

Пример использования jQuery метода .stop() (остановка элемента с определенной очередью)
Пример использования jQuery метода .stop() (остановка элемента с определенной очередью)

В этом примере мы рассмотрим использование методов .clearQueue() и .stop():

<!DOCTYPE html>
<html>
	<head>
		<title>Пример использования jQuery методов .clearQueue() и .stop()</title>
		<style></style>
		<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
		<script>
	$( document ).ready(function(){
	  // функция выполняющая анимации элемента
	  function first() {
	    $( "div" ).css( "width", "80px" ) // устанавливаем ширину элемента равную 80 пикселей
                      .animate({width: "30%"}, 2000) // анимируем увеличение ширины элемента до 30% за 2 секунды
                      .animate({width: "50%"}, 2000) // анимируем увеличение ширины элемента до 50% за 2 секунды
                      .animate({width: "70%"}, 2000) // анимируем увеличение ширины элемента до 70% за 2 секунды
                      .animate({width: "90%"}, 2000);// анимируем увеличение ширины элемента до 90% за 2 секунды
	  }
	  
	  $( ".start" ).click(function(){ // задаем функцию при нажатии на элемент с классом start 
	    first() // запускаем функцию
	  });
		
	  $( ".clear" ).click(function(){ // задаем функцию при нажатии на элемент с классом clear 
	    $( "div" ).clearQueue(); // по порядку удаляем из очереди все функции, которые еще не были выполнены 
	  });
		
	  $( ".stop" ).click(function(){ // задаем функцию при нажатии на элемент с классом stop 
	    $( "div" ).stop( true ); // останавливаем все выполняющиеся в настоящее время анимации и удаляем все очереди анимаций
	  });

	  $( ".stop2" ).click(function(){ // задаем функцию при нажатии на элемент с классом stop2 
	    $( "div" ).stop( true, true ); // останавливаем все выполняющиеся в настоящее время анимации, удаляем все очереди анимаций, и завершаем все анимации 
	  });
	});
		</script>
	</head>
	<body>
		<button class = "start">start</button>
		<button class = "clear">clearQueue()</button>
		<button class = "stop">stop(true)</button>
		<button class = "stop2">stop( true, true )</button>
		<div></div>
	</body>
</html>

В этом примере мы разместили в документе один элемент <div> и четыре кнопки (элементы <button>), для каждой назначили обработчик события "click" (клик левой кнопкой мыши):

Результат нашего примера:

Пример использования jQuery методов .clearQueue() и .stop()
Пример использования jQuery методов .clearQueue() и .stop()
jQuery эффекты