Возможно ли, что requestAnimationFrame
мешает работе других переходов CSS?
У меня есть функция requestAnimationFrame
, которая перемещает позицию контейнера div. Обновление выполняется при каждом запросе кадра. Контейнер div содержит анимацию CSS:
.container {
...
animation: pulse 2s infinite;
...
}
@keyframes pulse {
0% { transform: scale(1); opacity: 1; }
70% { transform: scale(3); opacity: 0; }
100% { transform: scale(1); opacity: 0; }
}
Анимация CSS работает нормально, пока я НЕ вызываю requestAnimationFrame
или прекращаю делать запросы.
Кроме того, вызов requestAnimationFrame
также предотвращает работу других переходов, выходящих за рамки анимированного контейнера, например, навигационного ящика, который я использую в качестве бокового меню.
В качестве обходного пути для навигационного ящика мне пришлось обернуть запрос следующим образом:
this.animationId = requestAnimationFrame((timestamp) => {
setTimeout(() => {
this.animateContainer(timestamp)
}, 50)
})
Внутренний setTimeout
используется для задержки следующей анимации, чтобы позволить ящику выдвинуться.
Однако это не помогает для анимации контейнера. Всякий раз, когда рисуется новый кадр, начинается анимация CSS, которая сбрасывается с каждым новым кадром, поэтому анимация мерцает.
РЕДАКТИРОВАТЬ:
Почему я использую requestAnimationFrame и анимацию CSS?
requestAnimationFrame
используется для интерполяции координат маркера на карте. Фактическое положение для X и Y рассчитывается картой в зависимости от холста. Затем анимация CSS используется для анимации этого маркера.
requestAnimationFrame
, но с тем, как вы добавляетеmarker
на карту. В функцииanimateMarker
вы продолжаете добавлять маркер каждый раз, когда он вызывается. Это сбрасывает маркер и, следовательно, анимацию. Проверьте свою модифицированную скрипту, например jsfiddle - person Emiel Zuurbier   schedule 20.09.2019animateMarker
- person Kaiido   schedule 20.09.2019