jQuery (billy.carousel) - карусель иногда сходит с ума - PullRequest
1 голос
/ 03 августа 2011

спасибо заранее, если вы готовы дать мне решение.Я работаю над сайтом http://tecnointelcom.com/new/ - и на домашней странице есть карусель.Я использую плагин jQuery «Billy the Carousel», время от времени он сходит с ума и перепрыгивает со слайда на другой менее чем за 1 секунду (периодически, так что около 5 слайдов за 3 секунды), но индикатор все еще находится впривязка слайда (он не сходит с ума, как слайдер).

плагин jquery (тот же маршрут, что и у предыдущей ссылки) /js/billy.carousel.jquery.js

файл инициализации находится в (тот же маршрут, что и предыдущая ссылка) /js/init.js

Pls ... может кто-нибудь увидеть это и ответить с чем-то, что я должен отсутствовать в коде?

Спасибо, Алекс

1 Ответ

1 голос
/ 04 августа 2011

Похоже, что плагин ставит в очередь функции, которые содержат анимацию с setInterval () .Последние современные браузеры начали реализовывать функцию под названием requestAnimationFrame () для экономии ресурсов.По сути, ваши анимационные вызовы суммируются, в то время как ваша вкладка с каруселью находится не в фокусе или скрыта.Когда вкладка восстанавливает фокус, jQuery выполняет их все одновременно.JQuery советует вам не делать этого.Из документации .animate () :

Из-за характера requestAnimationFrame () вы никогда не должны ставить анимацию в очередь, используя цикл setInterval или setTimeout.Чтобы сохранить ресурсы ЦП, браузеры, поддерживающие requestAnimationFrame, не будут обновлять анимацию, когда окно / вкладка не отображается.Если вы продолжите ставить анимации в очередь с помощью setInterval или setTimeout, когда анимация приостановлена, все анимации в очереди начнут воспроизводиться, когда окно / вкладка восстановит фокус.Чтобы избежать этой потенциальной проблемы, используйте обратный вызов вашей последней анимации в цикле или добавьте функцию к элементам .queue (), чтобы установить тайм-аут для запуска следующей анимации.

Вы также можетеочистите fx-очередь объекта с помощью .clearQueue () непосредственно перед началом анимации.В строке 160 billy.carousel.jquery.js:

object.clearQueue().animate({'marginLeft': "0"}, option.scrollSpeed);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...