Spec-Zone.ru › jQuery

.animate()

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

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

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

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

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

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

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

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

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

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

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

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

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

Длительность

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

Функции обратного вызова

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

Примечание: при попытке анимировать элемент с высотой или шириной 0px, содержимое которого видно благодаря переполнению, 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.

Примеры:

Пример 1

Нажмите кнопку, чтобы анимировать 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-4.0.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>

Демонстрация:

Пример 2

Анимирует свойство 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-4.0.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>

Демонстрация:

Пример 3

Первая кнопка демонстрирует работу анимации вне очереди. Она расширяет 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-4.0.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>

Демонстрация:

Пример 4

Анимирует свойство left первого div и синхронизирует остальные div, используя функцию шага для задания их свойств 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-4.0.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>

Демонстрация:

Пример 5

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

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

Пример 6

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

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

Пример 7

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

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

Пример 8

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

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

Пример 9

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

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

Пример 10

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

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

Пример 11

Анимирует все абзацы и выполняет функцию обратного вызова по завершении анимации. Первый аргумент — объект 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