nalomenko
@nalomenko
Руководитель отдела разработок в студии «Lava»

JQuery fadeOut()/fadeIn(): работа в фоне?

Доброго времени суток, дорогие Хабровчане!



Столкнулся с ранее неизвестной мне проблемой работы jquery.fadeIn() и fadeOut() в свернутой вкладке.



Ситуация следующая: смена баннеров на сайте производится раз в 5 секунд, посредством setTimeout().

Баннеры сменяют друг друга посредством fadeOut() текущего и одновременного с ним fadeIn() следующего. При этом также подсвечиваются switcher'ы c номерами баннеров посредством простой смены класса соответствующего <span>.



Если свернуть вкладку на 2-3 минуты, а потом открыть, то баннеры будут лихорадочно сменять друг друга один за одним (такое ощущение, что jquery поскладывала все сработавшие от таймера вызовы fade-функций в очередь, пока вкладка была свёрнута, и запустила всю очередь при её активизации).



Как с этим бороться? Как заставить графические fadein/fadeout-процессы работать в теневом/фоновом режиме?



Заранее спасибо всем за помощь!
  • Вопрос задан
  • 3666 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Because of the nature of requestAnimationFrame(), you should never queue animations using a setInterval or setTimeout loop. In order to preserve CPU resources, browsers that support requestAnimationFrame will not update animations when the window/tab is not displayed. If you continue to queue animations via setInterval or setTimeout while animation is paused, all of the queued animations will begin playing when the window/tab regains focus. To avoid this potential problem, use the callback of your last animation in the loop, or append a function to the elements .queue() to set the timeout to start the next animation.

Иногда полезно читать доку. (коммент к статье про .animate()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект