animate()
Метод animate() используется для создания пользовательской анимации. Анимация осуществляется за счёт плавного изменения одного или нескольких CSS-свойств. Изменение всех указанных свойств выполняется одновременно (параллельно).
Свойства, которые необходимо анимировать, передаются первым аргументом метода в виде объекта, в котором каждому свойству указано конечное значение.
Метод animate() позволяет указать параметры анимации. Они задаются в виде объекта (параметры duration, easing и complete можно задать отдельными аргументами).
Варианты использования
- jQ_object.animate(свойства, опции) => jQuery
- Выполняет анимацию изменения заданных CSS-свойств для каждого элемента выборки. Анимируемые свойства передаются в виде объекта, в котором каждому свойству установлено конечное значение. Параметры анимации (опции) тоже задаются в виде объекта. Описание свойств и опций приводится ниже.
- jQ_object.animate(свойства[, duration][, easing][, complete]) => jQuery
- 
      Выполняет анимацию изменения заданных CSS-свойств для каждого элемента выборки.
 duration,easing,complete- наиболее востребованные параметры анимации (их описание приводится ниже). Возможность указать данные опции отдельными аргументами реализована для удобства разработки.
Анимируемые свойства
Свойства, которые необходимо анимировать, передаются первым аргументом метода в виде объекта, в котором каждому свойству установлено конечное значение. Данный объект аналогичен тому, который можно указать при вызове метода css(). Пример:
/* Анимация одновременно двух свойств */
jQ_object.animate({
  CSS_свойство_1: значение_1,
  CSS_свойство_2: значение_2
})
  Анимировать можно только те свойства, которые имеют числовое значение. Например, свойства width, margin и т.п. можно анимировать, а свойство background-color нельзя. Значение свойства задаётся в виде строки с указанием единицы измерения. Если значение задано без единиц измерения или простым числом, тогда значение принимается в пикселях. Пример:
jQ_object.animate({
  width: 300,
  'line-height': '25'
})
/* В конце анимации свойство width примет значение 300px, а line-height 25px */
  Как и в методе css(), конечное значение CSS-свойства можно задать в виде приращения к текущему значению. Если строка начинается с 
 или +=
, тогда выполняется увеличение или уменьшение значения на заданную величину. Пример:-=
jQ_object.animate({
  width: '+=50'
})
/* Свойство width увеличится на 50px */
  Также, в качестве значения свойства можно указать одно из специальных значений:
- 'hide'- уменьшает значение свойства до 0, а после этого скрывает элемент (устанавливает свойство- display: none);
- 'show'- показывает элемент на странице (удаляет свойство- display: none), а после этого увеличивает значение свойства от 0 до исходного;
- 'toggle'- выполняет действия в зависимости от значения свойства- display. Если свойство- displayимеет значение- none, тогда выполняются действия по алгоритму- 'show'. Во всех остальных случаях выполняется алгоритм- 'hide'.
Помимо существующих CSS-свойств, в jQuery можно анимировать дополнительные свойства scrollTop и scrollLeft - вертикальная и горизонтальная прокрутка страницы соответственно.
Параметры анимации
- duration :number,string = 400
- Продолжительность анимации в миллисекундах. Можно использовать ключевые слова 'fast'и'slow', которые соответствуют значениям 200 и 600. Если данный параметр не указан, тогда используется значение 400.
- easing :string = 'swing'
- 
      Определяет, с какой скоростью выполняется анимация в различные моменты времени. В jQuery доступны два ключевых слова для определения динамики анимации:
      - 'linear'- анимация выполняется с постоянной скоростью. Это самый простой вариант анимации. Значение параметра изменяется пропорционально прошедшему времени.
- 'swing'- анимация начинается медленно и ускоряется, в средней части анимация выполняется с постоянной скоростью, а ближе к концу замедляется (как качели).
   - progress- время анимации в относительных единицах (от 0 до 100%);
- pos- относительное изменение параметра (от 0 до 100%).
 'swing'.
- specialEasing :object
- Позволяет отдельно задать свойство easingдля каждого анимируемого CSS-свойства. Параметр задаётся в виде объекта, в котором каждому CSS-свойству установлено значение'swing'или'linear'(или другое доступное значение).
- queue :boolean,string = true
- 
      Для одного элемента страницы может быть установлено несколько анимационных эффектов. По умолчанию каждая последующая анимация запускается только по завершении предыдущей.
 Параметрqueueопределяет, поместить ли данный эффект в очередь или запустить немедленно:- true- поместить анимацию в стандартную очередь
 (используется по умолчанию);- fx
- false- запустить анимацию немедленно.
 dequeue().
- step :function(текущее_значение, объект_анимации_свойства)
- 
      Функция, которая будет запущена после каждого изменения каждого CSS-свойства на каждом элементе выборки. Функция может принимать два аргумента:
      - Числовое значение, которое присвоено изменяемому CSS-стилю на данном шаге анимации.
- 
          Объект анимации изменяемого CSS-свойства для текущего элемента выборки. Изменяя некоторые свойства данного объекта, можно управлять анимацией. Объект содержит следующие свойства:
          - elem- ссылка на текущий анимируемый элемент;
- prop- название анимируемого CSS-свойства;
- easing- значение параметра- easingдля данного CSS-свойства;
- options- ссылка на объект, содержащий параметры анимации (в том числе, указанные при вызове данного метода);
- unit- единица измерения CSS-свойства;
- start- начальное значение CSS-свойства;
- end- конечное значение CSS-свойства;
- now- текущее значение CSS-свойства;
- pos- число от 0 до 1, характеризующее степень завершённости анимации по изменяемому параметру.
 
 
- progress :function(общий_объект_анимации, время, оставшееся_время)
- 
      Функция, которая будет запущена после каждого шага анимации на каждом элементе выборки (шаг анимации - однократное изменение всех анимируемых CSS-свойств). Функция может принимать три аргумента:
      - 
          Общий объект анимации для текущего элемента выборки. Изменяя некоторые свойства данного объекта, можно управлять анимацией. Основные свойства объекта:
          - elem- ссылка на текущий анимируемый элемент;
- opts- ссылка на объект, содержащий параметры анимации (в том числе, указанные при вызове данного метода);
- startTime- время начала анимации в миллисекундах;
- duration- заданное время анимации в миллисекундах;
- tweens- массив индивидуальных объектов анимации по отдельным CSS-свойствам.
 
- Число от 0 до 1, характеризующее степень завершённости анимации по времени.
- Количество миллисекунд, оставшихся до конца анимации.
 
- 
          Общий объект анимации для текущего элемента выборки. Изменяя некоторые свойства данного объекта, можно управлять анимацией. Основные свойства объекта:
          
- complete :function()
- Функция, которая будет запущена для каждого элемента выборки в момент завершения анимации. Внутри функции переменная thisсодержит ссылку на тот элемент, для которого выполняется функция.
- start :function(общий_объект_анимации)
- Функция, которая будет запущена для каждого элемента выборки в момент начала анимации. Функция может принимать один аргумент - общий объект анимации для текущего элемента.
- done :function(общий_объект_анимации, завершено_мгновенно)
- 
    Функция, которая будет запущена для каждого элемента выборки после завершения анимации. Функция может принимать два аргумента:
    - Общий объект анимации для текущего элемента.
- 
        Логическое значение, характеризующее завершённость анимации по изменяемым параметрам при принудительном завершении анимации методами stop()илиfinish():- true- анимируемым свойствам присвоены конечные значения;
- false- анимируемые свойства не достигли конечных значений.
 undefined.
 
- fail :function(общий_объект_анимации, завершено_мгновенно)
- 
    Функция, которая будет запущена для каждого элемента выборки с незаконченной анимацией (если анимация не может быть завершена). Функция может принимать два аргумента:
    - Общий объект анимации для текущего элемента.
- 
        Логическое значение, характеризующее завершённость анимации по изменяемым параметрам при принудительном завершении анимации методами stop()илиfinish():- true- анимируемым свойствам присвоены конечные значения;
- false- анимируемые свойства не достигли конечных значений.
 undefined.
 
- always :function(общий_объект_анимации, завершено_мгновенно)
- 
    Функция, которая будет запущена в конце анимации для каждого элемента выборки вне зависимости от того, может ли она быть завершена. Функция может принимать два аргумента:
    - Общий объект анимации для текущего элемента.
- 
        Логическое значение, характеризующее завершённость анимации по изменяемым параметрам при принудительном завершении анимации методами stop()илиfinish():- true- анимируемым свойствам присвоены конечные значения;
- false- анимируемые свойства не достигли конечных значений.
 undefined.
 
Примеры
<html>
<head>
  <title>Анимация в jQuery</title>
  <script type="text/javascript" src="js/jquery.js"></script>
</head>
<body>
  <div style="width: 200px; height: 200px; background: coral"></div>
  <button>Кнопка</button>
</body>
</html>
 
<script>
$('button').on('click', function() {
  $('div').animate(
    {
      height: 'toggle',
      width: 'toggle',
      marginLeft: '+=30'
    },
    {
      duration: 5000,
      specialEasing: {
        height: 'linear',
        width: 'swing',
        marginLeft: 'linear'
      },
      progress: function(animation, progress, remainingMs) {
        $(this).text(remainingMs);
      },
      complete: function() {
        alert('Анимация завершена');
      }
    });
});
</script>
  <html>
<head>
  <title>Анимация в jQuery</title>
  <script type="text/javascript" src="js/jquery.js"></script>
</head>
<body>
  <button class="button_left">←</button>
  <button class="button_right">→</button>
  <div style="width: 50px; height: 50px; background: coral; position: relative"></div>
</body>
</html>
 
<script>
$('.button_left').on('click', function() {
  $('div').animate({left: '-=50'});
});
$('.button_right').on('click', function() {
  $('div').animate({left: '+=50'});
});
</script>