09.08.2023, 15:22
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
setInterval замедляется
Такая ситуация. Открываю popup окно в котором должна быть анимация. Вызываю setInterval и все работает поначалу, но когда пытаюсь максимизировать popup окно, все многократно замедляется.
В чем тут проблема?
(браузер Edge)
Как-то так: http://dkirusfe.bget.ru/interval-test.html
Последний раз редактировалось rgl, 09.08.2023 в 15:25.
|
|
09.08.2023, 18:49
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,569
|
|
Ни и на будущее(текущей проблемы это не решит, см. причину выше) - для анимации следует использовать requestAnimationFrame чтобы работать напрямую с отрисовкой браузера, а не абстрактным таймером который ничего не гарантирует по определению.
__________________
29375, 35
|
|
09.08.2023, 18:57
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,742
|
|
Aetae, requestAnimationFrame вроде тоже не будет срабатывать на неактивной вкладке
|
|
09.08.2023, 21:32
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,569
|
|
voraa, дык я уточнил в скобочках.)
__________________
29375, 35
|
|
14.08.2023, 16:13
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
voraa,
Спасибо.
Aetae,
Спасибо за информацию, почитал, попробовал, могу немножко поспорить. setInterval ничего не гарантирует, но на практике в моем случае при интервеле 4ms и больше обновляет картинку примерно с заданной частотой, что меня устраивает c большим запасом. С другой стороны, requestAnimationFrame не позволяет задавать интервал (т.е. частоту), какая получится, такая и будет. В моем случае получается что-то примерно 16ms
requestAnimationFrame может быть полезна, напр, если надо добиться "плавности" движения, тогда, зная время, которое прошло с прошлого вызова, можно расчитать смещение. Но у меня задача другая, и в моем конкретном случае setInterval идеально подходит
|
|
14.08.2023, 16:18
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Форум не дает нажать плюсик, говорит "У Вас нет прав для выполнения этого действия. Пожалуйста, обновите страницу и войдите снова, прежде чем попробовать повторить действие."
|
|
14.08.2023, 16:21
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,205
|
|
Сообщение от rgl
|
У Вас нет прав для выполнения этого действия
|
Проверь протокол - нужен https.
|
|
14.08.2023, 16:55
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,742
|
|
Сообщение от rgl
|
но на практике в моем случае при интервеле 4ms и больше обновляет картинку примерно с заданной частотой, что меня устраивает c большим запасом. С другой стороны, requestAnimationFrame не позволяет задавать интервал (т.е. частоту), какая получится, такая и будет. В моем случае получается что-то примерно 16ms
|
Картинка все равно будет обновляться так, как она может. И именно requestAnimationFrame говорит: Выполни эту функцию перед очередным обновлением. От того, что поставить 4мс экран не будет обновлятться быстрее Если у вашего монитора частота 60Гц, то это как раз и будет 1/60 ~ 16.67 мс. Быстрее никак. Медленнее - может быть, если поток занят какой то тяжелой задачей, тогда очередное обновление будет только после ее окончания.
Последний раз редактировалось voraa, 14.08.2023 в 16:59.
|
|
15.08.2023, 18:30
|
Кандидат Javascript-наук
|
|
Регистрация: 22.02.2017
Сообщений: 145
|
|
Сообщение от rgl
|
Форум не дает нажать плюсик, говорит "У Вас нет прав для выполнения этого действия. Пожалуйста, обновите страницу и войдите снова, прежде чем попробовать повторить действие."
|
Та же проблема!(((
|
|
|
|