Spec-Zone.ru › jQuery

.stop()

.stop( [clearQueue ] [, jumpToEnd ] )Возвращает: jQuery

Описание: Останавливает текущую анимацию на сопоставленных элементах.

  • версия добавлена: 1.2.stop( [clearQueue ] [, jumpToEnd ] )

    • clearQueue (по умолчанию: false)
      Тип: Boolean
      Логическое значение, указывающее на удаление всех анимаций из очереди. По умолчанию false.
    • jumpToEnd (по умолчанию: false)
      Тип: Boolean
      Логическое значение, указывающее на немедленное завершение текущей анимации. По умолчанию false.
  • версия добавлена: 1.7.stop( [queue ] [, clearQueue ] [, jumpToEnd ] )

    • очередь
      Тип: String
      Имя очереди, в которой нужно остановить анимации.
    • clearQueue (по умолчанию: false)
      Тип: Boolean
      Логическое значение, указывающее на удаление всех анимаций из очереди. По умолчанию false.
    • jumpToEnd (по умолчанию: false)
      Тип: Boolean
      Логическое значение, указывающее на немедленное завершение текущей анимации. По умолчанию false.

При вызове .stop() на элементе, текущая анимация (если она есть) немедленно останавливается. Например, если элемент скрывается с помощью .slideUp() и затем вызывается .stop(), элемент останется видимым, но его высота будет частью от предыдущей. Обработчики событий не вызываются.

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

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

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

Полезность метода .stop() очевидна, когда нам нужно анимировать элемент при mouseenter и mouseleave:

<div id="hoverme">
  Hover me
  <img id="hoverme" src="book.png" alt="" width="100" height="123">
</div>

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

$( "#hoverme-stop-2" ).hover(function() {
  $( this ).find( "img" ).stop( true, true ).fadeOut();
}, function() {
  $( this ).find( "img" ).stop( true, true ).fadeIn();
});

Переключение анимаций

Начиная с jQuery 1.7, преждевременное прекращение переключаемой анимации с помощью .stop() запустит внутренний отслеживающий механизм jQuery. В предыдущих версиях вызов метода .stop() до завершения переключаемой анимации приводило к потере состояний анимации (если jumpToEnd был false). Любые последующие анимации начинались с нового «полу-состояния», иногда приводя к исчезновению элемента. Чтобы наблюдать за новым поведением, см. окончательный пример ниже.

Анимации могут быть остановлены глобально, установив свойство $.fx.off в true. Когда это делается, все методы анимации немедленно устанавливают элементы в конечное состояние при вызове, а не отображают эффект.

Примеры:

Нажмите кнопку «Начать» один раз, чтобы запустить анимацию, затем нажмите кнопку «СТОП», чтобы остановить её в текущем положении. Другой вариант — нажать несколько кнопок, чтобы добавить их в очередь, и увидеть, что stop просто убивает текущую воспроизводимую.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>stop demo</title>
  <style>
  div {
    position: absolute;
    background-color: #abc;
    left: 0px;
    top: 30px;
    width: 60px;
    height: 60px;
    margin: 5px;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<button id="go">Go</button>
<button id="stop">STOP!</button>
<button id="back">Back</button>
<div class="block"></div>
 
<script>
// Start animation
$( "#go" ).on( "click", function() {
  $( ".block" ).animate({ left: "+=100px" }, 2000 );
});
 
// Stop animation when button is clicked
$( "#stop" ).on( "click", function() {
  $( ".block" ).stop();
});
 
// Start animation in the opposite direction
$( "#back" ).on( "click", function() {
  $( ".block" ).animate({ left: "-=100px" }, 2000 );
});
</script>
 
</body>
</html>

Демо:

Нажмите кнопку «slideToggle», чтобы запустить анимацию, затем снова нажмите, прежде чем анимация завершится. Анимация переключится в другом направлении от сохранённой начальной точки.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>stop demo</title>
  <style>
  .block {
    background-color: #abc;
    border: 2px solid black;
    width: 200px;
    height: 80px;
    margin: 10px;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<button id="toggle">slideToggle</button>
<div class="block"></div>
 
<script>
var $block = $( ".block" );
 
// Toggle a sliding animation animation
$( "#toggle" ).on( "click", function() {
  $block.stop().slideToggle( 1000 );
});
</script>
 
</body>
</html>

Демо:

© The jQuery Foundation and other contributors
Licensed under the MIT License.
https://api.jquery.com/stop

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API