Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не предсказуемые тормоза в слайдере. (https://javascript.ru/forum/jquery/21916-ne-predskazuemye-tormoza-v-slajjdere.html)

aphextwin 10.05.2012 15:02

Цитата:

Сообщение от vadim5june (Сообщение 173555)
почитайте вот здесь
http://habrahabr.ru/post/114358/

Это немного не то. Я не хочу что-то двигать каждые 100 мс. Я хочу чтобы раз в 10-30 секунд выполнялось определенное действие.

DjDiablo 10.05.2012 16:17

можешь засечь промежутки между срабатыванием таймера,
это даст пищу для размышлений.
Посмотри как ведёт себя обработчик когда тебя нет на странице, и как ведёт себя в момент переключения.

<script>
//глобальная переменная
var oldTime;

f=function(){
//внутри обработчика
   var d = new Date(),time=0;
   time=d.getTime();

   // результат смотреть будем в консоли
   console.log(d.toLocaleTimeString(),"=",time-oldTime);

   //выведем на экран, для наглядности на форуме
   window.document.write(d.toLocaleTimeString()+"="+(time-oldTime)+"<br/>");
   oldTime=time;
   setTimeout(f,1000);
}
f();
</script>

aphextwin 10.05.2012 17:34

Щас попробовал выводить только время срабатывания. Действительно, работает и в фоне, без каких либо проблем.
Я пришел к мысли, что это тормозит jquery, при переключении слайдов у меня используются методы fadein() и fadeout() видимо jq не выполняет их в фоне (что в принципе логично), а накапливает их где то в своем кеше. Как с этим бороться я не представляю. м.б. есть какие то настройки библиотеки, для регулирования таких ситуаций?

aphextwin 10.05.2012 17:46

хех. победил это )
перед запуском анимации проверяю состояние state, которое устанавливается так:

$(window).blur(function(){
    state = 0;   
});

$(window).focus(function(){
    state = 1;    
});

DjDiablo 10.05.2012 17:51

хз, но как вариант можно попробывать определять активность страницы.
Если страница активна тогда таймер работает, если не активна тогда таймер неработает

$(window).blur(function() {
    // здесь унечтожим таймер 
   clearTimeout(timeOut );
});
$(window).focus(function() {
   // здесь запустим функцию 
   autoAdvance();
 
});

блин на секунду опаздал))

aphextwin 10.05.2012 18:02

Цитата:

Сообщение от DjDiablo (Сообщение 173590)
$(window).focus(function() {
   // здесь запустим функцию 
   autoAdvance();
 
});

А вот тут у вас ошибочка, на которую я и сам напарывался уже ))))
Дело в том, что событие $(window).focus происходит не однократно, при получении фокуса, как мы с вами подумали, а постоянно. Именно поэтому я сделал через переменную состояния )

Ради эксперимента можете вызвать алерт из $(window).focus и посмотреть что выйдет )

vadim5june 10.05.2012 18:38

написал простейший слайдер с помощью setTimeout и не вижу никаких проблем о которых говорится в постах
Или неправильно смотрю?
http://all-html5.narod.ru/sliders/0/slider.htm

aphextwin 11.05.2012 05:36

Цитата:

Сообщение от vadim5june (Сообщение 173595)
написал простейший слайдер с помощью setTimeout и не вижу никаких проблем о которых говорится в постах
Или неправильно смотрю?

Насколько я понял накапливаются вызовы не setTimeout, а методов fadein-out у jquery


Часовой пояс GMT +3, время: 23:15.