Элемент: метод animate()
Базовая Широко доступная *
Данная функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с марта 2020 года.
* Некоторые части этой функции могут иметь различный уровень поддержки.
Метод animate() интерфейса Element — это метод-короткая запись, который создаёт новую анимацию Animation, применяет её к элементу и затем воспроизводит анимацию. Он возвращает созданный экземпляр объекта Animation.
Примечание: К элементам можно применить несколько анимаций. Список анимаций, которые влияют на элемент, можно получить, вызвав Element.getAnimations().
Синтаксис
animate(keyframes, options)
Параметры
keyframes-
Это может быть массив объектов ключевых кадров или объект ключевых кадров, свойства которого — массивы значений для итерации. Более подробную информацию см. в разделе Форматы ключевых кадров.
options-
Это может быть целое число, представляющее длительность анимации (в миллисекундах), или объект, содержащий одно или несколько свойств тайминга, описанных в параметре
KeyframeEffect()options параметр и/или следующие опции:idНеобязательно-
Свойство, уникальное для
animate(): Строка, используемая для ссылки на анимацию. rangeEndНеобязательно-
Определяет конец диапазона привязки анимации по её временной шкале, т.е. где на временной шкале анимация закончится. JavaScript-аналог свойства CSS
animation-range-end.rangeEndможет принимать несколько типов значений, как указано ниже:-
Строка, которая может быть
normal(что означает отсутствие изменений в диапазоне привязки анимации), CSS<length-percentage>, представляющий смещение,<timeline-range-name>, или<timeline-range-name>со следующим за ним<length-percentage>. Например:"normal" "entry" "cover 100%"
Подробное описание доступных значений см. в
animation-range. Также ознакомьтесь с Визуализатором диапазонов временной шкалы, который наглядно показывает, что означают различные значения. -
Объект, содержащий
rangeName(строку) иoffset(CSSNumericValue) свойства, представляющие<timeline-range-name>и<length-percentage>, как описано в предыдущем пункте. Например:{ rangeName: 'entry', offset: CSS.percent('100'), } -
CSSNumericValueпредставляющий смещение, например:CSS.percent("100");
-
rangeStartНеобязательно-
Определяет начало диапазона привязки анимации по её временной шкале, т.е. где на временной шкале анимация начнётся. JavaScript-аналог свойства CSS
animation-range-start.rangeStartможет принимать те же типы значений, что иrangeEnd. timelineНеобязательно-
Свойство, уникальное для
animate():AnimationTimeline, которая будет ассоциироваться с анимацией. По умолчанию —Document.timeline. JavaScript-аналог свойства CSSanimation-timelineсвойство.
Возвращаемое значение
Возвращает Animation.
Примеры
Поворот и масштабирование
В этом примере мы используем метод animate() для поворота и масштабирования элемента.
HTML
<div class="newspaper">Spinning newspaper<br />causes dizziness</div>
CSS
html,
body {
height: 100%;
}
body {
display: flex;
justify-content: center;
align-items: center;
background-color: black;
}
.newspaper {
padding: 0.5rem;
text-transform: uppercase;
text-align: center;
background-color: white;
cursor: pointer;
}
JavaScript
const newspaperSpinning = [
{ transform: "rotate(0) scale(1)" },
{ transform: "rotate(360deg) scale(0)" },
];
const newspaperTiming = {
duration: 2000,
iterations: 1,
};
const newspaper = document.querySelector(".newspaper");
newspaper.addEventListener("click", () => {
newspaper.animate(newspaperSpinning, newspaperTiming);
});
Результат
Демонстрация «В кроличью нору»
В демо «В кроличью нору» (с API веб-анимаций) мы используем удобный метод animate() для непосредственного создания и запуска анимации на элементе #tunnel, чтобы заставить его подниматься вверх бесконечно. Обратите внимание на массив объектов, переданных в качестве ключевых кадров, а также блок опций тайминга.
document.getElementById("tunnel").animate(
[
// keyframes
{ transform: "translateY(0px)" },
{ transform: "translateY(-300px)" },
],
{
// timing options
duration: 1000,
iterations: Infinity,
},
);
Неявные ключевые кадры от/до
В более новых версиях браузеров вы можете установить начальное или конечное состояние анимации только (т.е. один ключевой кадр), и браузер выведет второе состояние, если сможет. Например, рассмотрите эту простую анимацию — объект ключевых кадров выглядит следующим образом:
let rotate360 = [{ transform: "rotate(360deg)" }];
Мы указали только конечное состояние анимации, а начальное состояние подразумевается.
timeline, rangeStart и rangeEnd
Типичное использование свойств timeline, rangeStart, и rangeEnd может выглядеть так:
const img = document.querySelector("img");
const timeline = new ViewTimeline({
subject: img,
axis: "block",
});
img.animate(
{
opacity: [0, 1],
transform: ["scaleX(0)", "scaleX(1)"],
},
{
fill: "both",
duration: 1,
timeline,
rangeStart: "cover 0%",
rangeEnd: "cover 100%",
},
);
Спецификации
| Спецификация |
|---|
| Web Animations # dom-animatable-animate |
Совместимость с браузерами
| Рабочий стол | Мобильное устройство | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
animate |
36 | 79 | 48 | 23 | 13.1 | 36 | 48 | 24 | 13.4 | 3.0 | 37 |
implicit_tofrom |
84 | 84 | 75 | 70 | 13.1Реализация кажется несколько глючной. Дополнительная информация будет предоставлена при ее появлении. |
84 | 79 | 60 | 13.4Реализация кажется несколько глючной. Дополнительная информация будет предоставлена при ее появлении. |
14.0 | 84 |
options_composite_parameter |
84 | 84 | 80 | 70 | 16 | 84 | 80 | 60 | 16 | 14.0 | 84 |
options_id_parameter |
50 | 79 | 48 | 37 | 13.1 | 50 | 48 | 37 | 13.4 | 5.0 | 50 |
options_iterationComposite_parameter |
Нет | Нет | 80 | Нет | Нет | Нет | 80 | Нет | Нет | Нет | Нет |
options_pseudoElement_parameter |
84 | 84 | 75 | 70 | 14 | 84 | 79 | 60 | 14 | 14.0 | 84 |
options_rangeEnd_parameter |
115 | 115 | Нет | 101 | Нет | 115 | Нет | 77 | Нет | 23.0 | 115 |
options_rangeStart_parameter |
115 | 115 | Нет | 101 | Нет | 115 | Нет | 77 | Нет | 23.0 | 115 |
options_timeline_parameter |
85 | 85 | Нет | 71 | 16 | 85 | Нет | 60 | 16 | 14.0 | 85 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Element/animate