Анимация: свойство overallProgress
Экспериментально: Это экспериментальная технология
Перед использованием в производстве внимательно ознакомьтесь с таблицей совместимости с браузерами.
Чтение-только свойство overallProgress интерфейса Animation возвращает число от 0 до 1, указывающее общий прогресс анимации по направлению к ее завершенному состоянию. Это общий прогресс по всем итерациям анимации, а не по каждой отдельной итерации.
overallProgress работает последовательно во всех анимациях, независимо от типа timeline.
Значение
Число от 0 до 1, или null, если анимация не имеет таймлайна, не активна или еще не была запущена, или если ее currentTime установлено на значение, не являющееся временем.
Если свойство iterations анимации установлено на Infinity, или если ее currentTime установлено на отрицательное значение, overallProgress вернет 0.
Если свойство duration анимации установлено на 0, overallProgress вернет 1.
Примеры
Отображение процентного прогресса
Этот демон использует overallProgress для создания индикатора «процентного прогресса», который отображается на экране во время выполнения анимации.
HTML
HTML содержит <button> для запуска анимации, элемент <p> для отображения процентного прогресса и <div>, который будет анимирован.
<button>Run animation</button> <p class="progress">Progress: 0%</p> <div class="box"></div>
CSS демо предоставляет некоторые базовые стили, которые не важны для понимания работы JavaScript, поэтому мы их скрыли для краткости.
JavaScript
В JavaScript мы получаем ссылки на элементы <button>, <p> и <div>.
Затем мы создаем:
- переменную
animation, которая будет ссылаться на анимацию после ее создания - массив ключевых кадров keyframes
- объект параметров с параметрами тайминга.
const btn = document.querySelector("button");
const progress = document.querySelector(".progress");
const box = document.querySelector(".box");
let animation;
const keyframes = [{ rotate: "0deg" }, { rotate: "360deg" }];
const timingProps = {
duration: 3000,
iterations: 1,
};
Далее мы добавляем обработчик события "click" к элементу <button> через addEventListener(), чтобы при нажатии:
- Запустить анимацию с помощью
Element.animate(), передав ей ключевые кадры и параметры, определенные ранее, и присвоив возвращенный экземплярAnimationпеременнойanimation. - Выполнить функцию
updateProgress()с помощью методаrequestAnimationFrame(), которая обновляет отображение процентного прогресса.
btn.addEventListener("click", () => {
// Animate the box
animation = box.animate(keyframes, timingProps);
// Start updating the progress percentage via rAF()
requestAnimationFrame(updateProgress);
});
Теперь определим функцию updateProgress(). Она запрашивает Animation.playState, чтобы узнать, не завершена ли анимация. Если она не завершена, мы получаем текущее значение overallProgress, умножаем его на 100 и округляем результат вниз, чтобы преобразовать его в целое процентное число, затем обновляем значение textContent элемента <p>. Затем мы вызываем requestAnimationFrame(updateProgress) снова, чтобы повторно запустить обновление процентного прогресса.
Если анимация завершена, мы заменяем процентный прогресс сообщением «Завершено!», и не вызываем requestAnimationFrame(updateProgress), чтобы остановка обновления процентного прогресса.
function updateProgress() {
// Check if the animation is finished
if (animation.playState !== "finished") {
// Convert overallProgress to a whole number percentage
const progressPercentage = Math.floor(animation.overallProgress * 100);
// Update the progress paragraph with the percentage
progress.textContent = `Progress: ${progressPercentage}%`;
// Only request the next frame if the animation is not finished
requestAnimationFrame(updateProgress);
} else {
progress.textContent = "Finished!";
}
}
Результат
Вывод выглядит так. Попробуйте нажать кнопку, чтобы запустить анимацию и связанный индикатор прогресса.
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
overallProgress |
133 | 133 | Нет | Нет | Нет | 133 | Нет | Нет | Нет | Нет | 133 |
См. также
-
Animationдля других методов и свойств, которые можно использовать для управления анимацией веб-страниц. - API анимации веб-страниц
© 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/Animation/overallProgress