Spec-Zone.ru › jQuery

.animate()

.animate( properties [, duration ] [, easing ] [, complete ] )Возвращает: jQuery

Описание: Выполнить пользовательскую анимацию набора свойств CSS.

  • версия добавлена: 1.0.animate( properties [, duration ] [, easing ] [, complete ] )

    • properties
      Тип: PlainObject
      Объект свойств CSS и значений, к которым будет направлена анимация.
    • duration (по умолчанию: 400)
      Тип: Число или Строка
      Строка или число, определяющие длительность анимации.
    • easing (по умолчанию: swing)
      Тип: Строка
      Строка, указывающая функцию плавного изменения для перехода.
    • complete
      Тип: Функция()
      Функция, вызываемая по завершении анимации, вызывается один раз на каждый совпадающий элемент.
  • версия добавлена: 1.0.animate( properties, options )

    • properties
      Тип: PlainObject
      Объект свойств CSS и значений, к которым будет направлена анимация.
    • options
      Тип: PlainObject
      Карта дополнительных параметров для передачи методу.
      • duration (по умолчанию: 400)
        Тип: Число или Строка
        Строка или число, определяющие длительность анимации.
      • easing (по умолчанию: swing)
        Тип: Строка
        Строка, указывающая функцию плавного изменения для перехода.
      • queue (по умолчанию: true)
        Тип: Булево или Строка
        Булево значение, указывающее, следует ли помещать анимацию в очередь эффектов. Если false, анимация начнется немедленно. Начиная с jQuery 1.7, параметр queue также может принимать строку, в этом случае анимация добавляется в очередь, представленную этой строкой. При использовании имени пользовательской очереди анимация автоматически не запускается; вы должны вызвать .dequeue("queuename") для ее запуска.
      • specialEasing
        Тип: PlainObject
        Объект, содержащий одно или несколько свойств CSS, определенных аргументом properties, и соответствующие функции плавного изменения. (версия добавлена: 1.4)
      • step
        Тип: Функция( Число now, Tween tween )
        Функция, которая вызывается для каждого анимированного свойства каждого анимированного элемента. Эта функция предоставляет возможность изменить объект Tween, чтобы изменить значение свойства перед его установкой.
      • progress
        Тип: Функция( Promise animation, Число progress, Число remainingMs )
        Функция, вызываемая после каждого шага анимации, только один раз на каждый анимированный элемент независимо от количества анимированных свойств. (версия добавлена: 1.8)
      • complete
        Тип: Функция()
        Функция, которая вызывается один раз, когда анимация элемента завершена.
      • start
        Тип: Функция( Promise animation )
        Функция, которая вызывается, когда анимация элемента начинается. (версия добавлена: 1.8)
      • done
        Тип: Функция( Promise animation, Булево jumpedToEnd )
        Функция, вызываемая при завершении анимации элемента (объект Promise разрешен). (версия добавлена: 1.8)
      • fail
        Тип: Функция( Promise animation, Булево jumpedToEnd )
        Функция, вызываемая при неудачном завершении анимации элемента (объект Promise отклонен). (версия добавлена: 1.8)
      • always
        Тип: Функция( Promise animation, Булево jumpedToEnd )
        Функция, вызываемая при завершении или остановке анимации элемента без завершения (объект Promise либо разрешен, либо отклонен). (версия добавлена: 1.8)

Метод .animate() позволяет нам создавать эффекты анимации для любых числовых свойств CSS. Единственным обязательным параметром является обычный объект свойств CSS. Этот объект похож на тот, который можно передать методу .css(), за исключением того, что диапазон свойств более ограничен.

Свойства и значения анимации

Все анимируемые свойства должны быть анимированы до единственного числового значения, за исключением случаев, указанных ниже; большинство свойств, которые не являются числовыми, не могут быть анимированы с помощью базовой функциональности jQuery (например, width, height, или left можно анимировать, но background-color — нет, если не используется плагин jQuery.Color). Значения свойств обрабатываются как число пикселей, если не указано иное. Единицы em и % могут быть указаны, где это применимо.

Помимо свойств стиля, некоторые нестилевые свойства, такие как scrollTop и scrollLeft, а также пользовательские свойства, могут быть анимированы.

Сокращенные свойства CSS (например, шрифт, фон, граница) не полностью поддерживаются. Например, если вы хотите анимировать ширину отрисованной границы, предварительно необходимо установить, по крайней мере, стиль границы и ширину границы, отличную от "auto". Или, если вы хотите анимировать размер шрифта, вы должны использовать fontSize или эквивалент в CSS 'font-size' вместо просто 'font'.

В дополнение к числовым значениям каждое свойство может принимать строки 'show', 'hide', и 'toggle'. Эти сокращения позволяют создавать пользовательские анимации скрытия и отображения, которые учитывают тип отображения элемента. Для использования встроенного отслеживания состояния переключения jQuery, ключевое слово 'toggle' должно последовательно задаваться как значение анимируемого свойства.

Анимируемые свойства также могут быть относительными. Если значение задается с префиксом += или -=, то целевое значение вычисляется путем добавления или вычитания заданного числа из текущего значения свойства.

Примечание: В отличие от сокращенных методов анимации, таких как .slideDown() и .fadeIn(), метод .animate() не делает скрытые элементы видимыми в рамках эффекта. Например, при $( "someElement" ).hide().animate({height: "20px"}, 500), анимация будет выполняться, но элемент останется скрытым.

Продолжительность

Продолжительности задаются в миллисекундах; более высокие значения указывают на более медленную анимацию, а не на более быструю. По умолчанию продолжительность составляет 400 миллисекунд. Строки 'fast' и 'slow' можно использовать для обозначения продолжительности 200 и 600 миллисекунд соответственно.

Обратные функции

Если заданы, обратные функции start, step, progress, complete, done, fail, и always вызываются на основе каждого элемента; this устанавливается на анимируемый элемент DOM. Если элементов нет в наборе, обратные функции не вызываются. Если анимируется несколько элементов, обратная функция выполняется один раз для каждого сопоставленного элемента, а не один раз для всей анимации. Используйте метод .promise() для получения промиса, к которому можно присоединить обратные функции, которые срабатывают один раз для набора анимированных элементов любого размера, включая ноль элементов.

Основное использование

Для анимации любого элемента, например, простого изображения:

<div id="clickme">
  Click here
</div>
<img id="book" src="book.png" alt="" width="100" height="123"
  style="position: relative; left: 10px;">

Для одновременной анимации прозрачности, левого смещения и высоты изображения:

$( "#clickme" ).on( "click", function() {
  $( "#book" ).animate({
    opacity: 0.25,
    left: "+=50",
    height: "toggle"
  }, 5000, function() {
    // Animation complete.
  });
});

Рисунок 1 - Иллюстрация заданного эффекта анимации

Обратите внимание, что целевое значение свойства height равно 'toggle'. Поскольку изображение было видимым до этого, анимация уменьшает высоту до 0, чтобы скрыть его. Второй щелчок затем обращает этот переход:

Рисунок 2 - Иллюстрация заданного эффекта анимации

Значение opacity изображения уже соответствует целевому значению, поэтому это свойство не анимируется при втором щелчке. Поскольку целевое значение для left является относительным значением, изображение смещается еще дальше вправо во время этой второй анимации.

Направляющие свойства (top, right, bottom, left) не оказывают заметного эффекта на элементы, если их свойство стиля position равно static, что по умолчанию верно.

Примечание: Проект jQuery UI расширяет метод .animate() путём возможности анимации некоторых нечисловых стилей, таких как цвета. Проект также включает механизмы для указания анимаций через классы CSS, а не отдельные атрибуты.

Примечание: если вы пытаетесь анимировать элемент с высотой или шириной 0 пикселей, где содержимое элемента видно из-за переполнения, jQuery может обрезать это переполнение во время анимации. Однако, фиксируя размеры исходного элемента, который скрывается, можно гарантировать, что анимация будет работать плавно. Для автоматической фиксации размеров вашего основного элемента без ручного задания можно использовать clearfix.

Функция шага

Вторая версия .animate() предоставляет опцию step — функцию обратного вызова, которая срабатывает на каждом шаге анимации. Эта функция полезна для включения пользовательских типов анимации или изменения анимации по мере ее выполнения. Она принимает два аргумента (now и fx), и this устанавливается на анимируемый элемент DOM.

  • now: числовое значение анимируемого свойства на каждом шаге
  • fx: ссылка на прототип объекта jQuery.fx, который содержит ряд свойств, таких как elem для анимируемого элемента, start и end для начального и конечного значений анимируемого свойства соответственно, и prop для анимируемого свойства.

Обратите внимание, что функция step вызывается для каждого анимируемого свойства на каждом анимируемом элементе. Например, для двух элементов списка функция step срабатывает четыре раза на каждом шаге анимации:

$( "li" ).animate({
  opacity: .5,
  height: "50%"
}, {
  step: function( now, fx ) {
    var data = fx.elem.id + " " + fx.prop + ": " + now;
    $( "body" ).append( "<div>" + data + "</div>" );
  }
});

Ускорение

Остальным параметром .animate() является строка, называющая функцию ускорения, которую нужно использовать. Функция ускорения задает скорость, с которой анимация продвигается в разные моменты анимации. В библиотеке jQuery реализованы только две функции ускорения: по умолчанию, называемая swing, и функция с постоянной скоростью, называемая linear. Больше функций ускорения доступны с использованием плагинов, в частности, пакета jQuery UI.

Ускорение по каждому свойству

Начиная с версии jQuery 1.4, вы можете задавать функции ускорения по каждому свойству в одном вызове .animate(). В первой версии .animate(), каждое свойство может принимать массив в качестве значения: первый элемент массива — свойство CSS, а второй — функция ускорения. Если функция ускорения по каждому свойству не определена для конкретного свойства, она использует значение необязательного аргумента ускорения метода .animate(). Если аргумент ускорения не определен, используется функция ускорения по умолчанию swing.

Например, для одновременной анимации ширины и высоты с функцией ускорения swing и анимации прозрачности с функцией ускорения linear.

$( "#clickme" ).on( "click", function() {
  $( "#book" ).animate({
    width: [ "toggle", "swing" ],
    height: [ "toggle", "swing" ],
    opacity: "toggle"
  }, 5000, "linear", function() {
    $( this ).after( "<div>Animation complete.</div>" );
  });
});

Во второй версии .animate(), объект опций может включать свойство specialEasing, которое само по себе является объектом свойств CSS и соответствующих функций ускорения. Например, для одновременной анимации ширины с использованием функции ускорения linear и анимации высоты с использованием функции ускорения easeOutBounce.

$( "#clickme" ).on( "click", function() {
  $( "#book" ).animate({
    width: "toggle",
    height: "toggle"
  }, {
    duration: 5000,
    specialEasing: {
      width: "linear",
      height: "easeOutBounce"
    },
    complete: function() {
      $( this ).after( "<div>Animation complete.</div>" );
    }
  });
});

Как уже отмечалось, для функции easeOutBounce требуется плагин.

Дополнительные примечания:

  • Все эффекты jQuery, включая .animate(), могут быть отключены глобально путём установки jQuery.fx.off = true, что эффективно устанавливает продолжительность в 0. Для получения дополнительной информации, см. jQuery.fx.off.

Примеры:

Нажмите кнопку, чтобы анимировать div с несколькими различными свойствами.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>animate demo</title>
  <style>
  div {
    background-color: #bca;
    width: 100px;
    border: 1px solid green;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<button id="go">&raquo; Run</button>
<div id="block">Hello!</div>
 
<script>
// Using multiple unit types within one animation.
 
$( "#go" ).on( "click", function() {
  $( "#block" ).animate({
    width: "70%",
    opacity: 0.4,
    marginLeft: "0.6in",
    fontSize: "3em",
    borderWidth: "10px"
  }, 1500 );
});
</script>
 
</body>
</html>

Демо:

Анимирует свойство left div с относительным значением. Нажмите несколько раз на кнопки, чтобы увидеть, как анимированные действия в очереди.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>animate demo</title>
  <style>
  div {
    position: absolute;
    background-color: #abc;
    left: 50px;
    width: 90px;
    height: 90px;
    margin: 5px;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<button id="left">&laquo;</button>
<button id="right">&raquo;</button>
<div class="block"></div>
 
<script>
$( "#right" ).on( "click", function() {
  $( ".block" ).animate({ "left": "+=50px" }, "slow" );
});
 
$( "#left" ).on( "click", function(){
  $( ".block" ).animate({ "left": "-=50px" }, "slow" );
});
</script>
 
</body>
</html>

Демо:

Первая кнопка показывает, как работает анимация без очереди. Она расширяет div до 90% ширины, **в то время как** увеличивается размер шрифта. После того, как изменение размера шрифта завершится, начнётся анимация рамки. Вторая кнопка запускает традиционную цепочку анимаций, где каждая анимация начнётся после завершения предыдущей анимации на элементе.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>animate demo</title>
  <style>
  div {
    background-color: #bca;
    width: 200px;
    height: 1.1em;
    text-align: center;
    border: 2px solid green;
    margin: 3px;
    font-size: 14px;
  }
  button {
    font-size: 14px;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<button id="go1">&raquo; Animate Block1</button>
<button id="go2">&raquo; Animate Block2</button>
<button id="go3">&raquo; Animate Both</button>
<button id="go4">&raquo; Reset</button>
<div id="block1">Block1</div>
<div id="block2">Block2</div>
 
<script>
$( "#go1" ).on( "click", function() {
  $( "#block1" )
    .animate({
      width: "90%"
    }, {
      queue: false,
      duration: 3000
    })
    .animate({ fontSize: "24px" }, 1500 )
    .animate({ borderRightWidth: "15px" }, 1500 );
});
 
$( "#go2" ).on( "click", function() {
  $( "#block2" )
    .animate({ width: "90%" }, 1000 )
    .animate({ fontSize: "24px" }, 1000 )
    .animate({ borderLeftWidth: "15px" }, 1000 );
});
 
$( "#go3" ).on( "click", function() {
  $( "#go1" ).add( "#go2" ).trigger( "click" );
});
 
$( "#go4" ).on( "click", function() {
  $( "div" ).css({
    width: "",
    fontSize: "",
    borderWidth: ""
  });
});
</script>
 
</body>
</html>

Демо:

Анимирует свойство left первого div и синхронизирует оставшиеся div, используя функцию step для установки свойств left на каждом этапе анимации.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>animate demo</title>
  <style>
  div {
    position: relative;
    background-color: #abc;
    width: 40px;
    height: 40px;
    float: left;
    margin: 5px;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<p><button id="go">Run »</button></p>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
 
<script>
$( "#go" ).on( "click", function() {
  $( ".block" ).first().animate({
    left: 100
  }, {
    duration: 1000,
    step: function( now, fx ){
      $( ".block" ).slice( 1 ).css( "left", now );
    }
  });
});
</script>
 
</body>
</html>

Демо:

Анимировать все абзацы, чтобы переключить высоту и непрозрачность, завершив анимацию в течение 600 миллисекунд.

$( "p" ).animate({
  height: "toggle",
  opacity: "toggle"
}, "slow" );

Анимировать все абзацы до левого стиля 50 и непрозрачности 1 (непрозрачный, видимый), завершив анимацию в течение 500 миллисекунд.

$( "p" ).animate({
  left: 50,
  opacity: 1
}, 500 );

Анимировать свойства стиля left и opacity всех абзацев; запустить анимацию *вне* очереди, чтобы она автоматически запускалась без ожидания своей очереди.

$( "p" ).animate({
  left: "50px",
  opacity: 1
}, {
  duration: 500,
  queue: false
});

Пример использования функции «сглаживания» для предоставления другого стиля анимации. Это будет работать только в том случае, если у вас есть плагин, который предоставляет эту функцию сглаживания. Обратите внимание, что этот код ничего не сделает, если элемент абзаца скрыт.

$( "p" ).animate({
  opacity: "show"
}, "slow", "easein" );

Анимировать все абзацы, чтобы переключить высоту и непрозрачность, завершив анимацию в течение 600 миллисекунд.

$( "p" ).animate({
  height: "toggle",
  opacity: "toggle"
}, {
  duration: "slow"
});

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

$( "p" ).animate({
  opacity: "show"
}, {
  duration: "slow",
  easing: "easein"
});

Анимировать все абзацы и выполнить обратный вызов функции, когда анимация завершится. Первый аргумент — объект свойств CSS, второй указывает, что анимация должна занять 1000 миллисекунд для завершения, третий указывает тип сглаживания, а четвертый аргумент — анонимная функция обратного вызова.

$( "p" ).animate({
  height: 200,
  width: 400,
  opacity: 0.5
}, 1000, "linear", function() {
  alert( "all done" );
});

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

Spec-Zone.ru

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