Element: метод animate()
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since март 2020 г..
* Some parts of this feature may have varying levels of support.
Метод animate() интерфейса Element это быстрый способ создания Animation, которая применяется к элементу и сразу запускается. Метод возвращает созданный экземпляр Animation.
Примечание:
Элементы могут иметь несколько анимаций. Чтобы получить список анимаций, которые влияют на элемент, можно использовать метод Element.getAnimations().
Синтаксис
animate(keyframes, options)
Параметры
keyframes-
Массив объектов кадров или объект кадра, свойства которого являются массивами значений для итерации. Смотрите форматы кадров для получения подробной информации.
options-
Целое число, представляющее продолжительность анимации (в миллисекундах) или объект, содержащий одно или более свойств, описанных в параметре
optionsконструктораKeyframeEffect()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для подробного описания доступных значений. Также полезно будет ознакомится с материалом View Timeline Ranges Visualizer, где визуально показывается поведение разных значений. -
Объект, содержащий свойства
rangeName(строка) иoffset(свойстваCSSNumericValue), представляющие<timeline-range-name>и<length-percentage>, описанные в предыдущем пункте. Например:js{ rangeName: 'entry', offset: CSS.percent('100'), } -
CSSNumericValue, описывающее смещение, например:jsCSS.percent("100");
-
rangeStartНеобязательный-
Указывает начало диапазона анимации, JavaScript-эквивалент CSS-свойства
animation-range-start.rangeStartможет принимать такие же значения, какrangeEnd. timelineНеобязательный-
Уникальное для
animate()свойство:AnimationTimelineдля связи с анимацией, JavaScript-эквивалент CSS-свойстваanimation-timeline. По умолчанию равноDocument.timeline.
Возвращаемое значение
Возвращает Animation.
Примеры
>Вращение и масштабирование
В этом примере мы используем метод animate() для вращения и масштабирования элемента.
HTML
<div class="newspaper">Вращение газеты<br />вызывает головокружение</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);
});
Result
«Спускаясь в кроличью нору»
В демо Down the Rabbit Hole (with the Web Animation API), мы используем удобный метод animate() для создания и запуска анимации на элементе #tunnel, чтобы заставить его бесконечно крутиться в падении. Обратите внимание на массив объектов, в котором переданы кадры, а также блок с настройкой продолжительности.
document.getElementById("tunnel").animate(
[
// кадры
{ transform: "translateY(0px)" },
{ transform: "translateY(-300px)" },
],
{
// настройки продолжительности
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%",
},
);
Спецификации
| Specification |
|---|
| Web Animations> # dom-animatable-animate> |
Совместимость с браузерами
Loading…