Являются ли setInterval () и setTimeout () плохими вещами в современной анимации jQuery? - PullRequest
4 голосов
/ 22 августа 2011

У меня были некоторые проблемы с анимацией в jQuery 1.6. Я решил это с помощью jQuery 1.5.

В своем проекте я использовал setInterval(), чтобы сделать собственный слайдер с логотипом. Анимации запускаются мгновенно (не одновременно) два на два. Все идет гладко, когда я нахожусь на странице, но когда я захожу на другую вкладку и возвращаюсь (через минуту, две или около того) в свой проект страницы, все сходит с ума ...

Хорошо, у меня есть один ответ для использования Queue(). Можно ли добиться того же с помощью этого метода?

У меня есть книга Manning jQuery в действии, и нет ничего на мгновенно запускаемых анимациях с Queue().

Ссылка на Jsfiddle

Чтобы процитировать часть этого ответа:

Из-за характера requestAnimationFrame () вы никогда не должны ставить анимации в очередь, используя цикл setInterval или setTimeout.

1 Ответ

12 голосов
/ 22 августа 2011

В общем setInterval == BAD и setTimeout == GOOD для анимации.

setInterval попытается перехватить воспроизведение, как указано nnnnnn :

некоторые браузеры могут поставить все в очередь, а затем попытаться догнать, когдавкладка снова получает фокус

Лучший способ зацикливания animate () - это рекурсивный вызов, например:

var myTimeout;

var myAnimation = function () {

    $('#myID').animate({
        [propertyKey]:[propertyValue]
    }, 5000, function() {
        myTimeout = setTimeOut(myAnimation, 1000);
    });
}

Обратите внимание, как удерживается myTimeout выходит за рамки myAnnimation , позволяя остановить анимацию

clearTimeout(myTimeout);

, которую можно подключить к событию window.unload .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...