Velocity.timestamp — внутреннее служебное свойство
библиотеки Velocity.js, представляющее собой текущее значение времени,
используемое движком анимации для синхронизации кадров, расчёта
длительности и управления состоянием анимаций.
В основе работы Velocity лежит цикл рендеринга, синхронизированный с
браузерным API requestAnimationFrame. На каждом шаге этого цикла
вычисляется временная метка (timestamp), которая затем
используется для:
Velocity.timestamp хранит текущее время в миллисекундах
с момента начала отсчёта (обычно — с момента запуска страницы или
анимационного цикла).
Значение timestamp передаётся браузером в колбэк функции
requestAnimationFrame. Внутри Velocity оно может быть:
requestAnimationFrameЭто позволяет достичь высокой точности анимации (субмиллисекундный уровень).
Свойство не предназначено для прямого использования разработчиком, но играет ключевую роль в следующих внутренних механизмах:
Прогресс определяется как отношение прошедшего времени к общей длительности:
progress = (currentTime - startTime) / duration
Где:
currentTime — значение
Velocity.timestampstartTime — момент начала анимацииduration — длительность анимацииVelocity использует timestamp для:
Если кадр был пропущен, расчёт всё равно будет корректным, так как используется абсолютное время, а не фиксированный шаг.
При запуске нескольких анимаций одновременно:
Velocity.timestampEasing-функции в Velocity (например, easeInOut,
spring, linear) зависят от нормализованного
прогресса, который рассчитывается на основе timestamp.
Пример:
easedProgress = easingFunction(progress)
Точность timestamp напрямую влияет на:
Использование performance.now() обеспечивает:
В отличие от старых подходов (например,
setInterval):
Velocity.timestamp обновляется один раз за кадр и
используется всеми активными анимациями:
requestAnimationFrame(callback)callback передаётся timestampVelocity.timestamp| Подход | Точность | Синхронизация | Производительность |
|---|---|---|---|
setInterval |
Низкая | Нет | Средняя |
Date.now() |
Средняя | Ограниченная | Средняя |
performance.now() |
Высокая | Да | Высокая |
Velocity.timestamp |
Высокая | Полная | Оптимизирована |
При переходе вкладки в фон:
requestAnimationFrame может приостанавливатьсяtimestampVelocity компенсирует это, корректируя прогресс.
При сильной загрузке:
timestamp продолжает растиВ сложных сценариях (например, при ручной манипуляции временем):
Хотя Velocity.timestamp является внутренним свойством,
понимание его работы важно для:
Velocity.timestamp тесно связан с:
Все эти компоненты используют единый источник времени, обеспечивая согласованную работу всей библиотеки.