Задержка Setinterval на свитке

У меня странная ошибка исключительно с браузером Vivaldi.

Я использую setinterval() (каждые 100 мс) для отображения элементов при прокрутке, однако, когда я начинаю прокручивать на моем MacBook Pro... setinterval прекращает работу и не возобновляет работу, пока прокрутка не остановится.

В результате элементы, которые появляются в setinterval, не исчезают до тех пор, пока пользователь фактически не прекратит прокрутку. Чтобы сделать это еще более странным, это поведение останавливается примерно через 10 секунд на странице.

Было ли любопытно, была ли это какая-то известная проблема или было исправление?

1 ответ

Решение

Это огромное упрощение, но, скорее всего, вы наблюдаете следующее поведение 1.

Когда вы звоните setTimeout / setInterval Вы помещаете функцию в очередь событий для выполнения после X мсек.

Тем не менее, браузер может выполнять более важную работу над стеком, например рисовать пользовательский интерфейс. В этом случае setInterval обратный вызов не будет обработан, пока не будет обработана работа с более высоким приоритетом.

Как смягчить проблему? Попробуйте вместо этого использовать requestAnimationFrame.

1 Исправления к этому посту приветствуются.

Другие вопросы по тегам