сбой тайм-аута jquery в Chrome через некоторое время

#jquery #google-chrome #settimeout

#jquery #google-chrome #settimeout

Вопрос:

итак, у меня есть этот скрипт, который просто вводит и выводит теги p и перебирает их. По какой-то причине, если я оставляю страницу открытой на некоторое время, они перестают исчезать и просто начинают накладываться друг на друга. Для этого требуется некоторое время, и я думаю, что это происходит только в Chrome.

 $(document).ready(function(){

   var current_quote = 0,
   fade_interval = null,
   num_quotes = $("#quotes p").length;

  // Fade in the first quote.
   $("#quote0").fadeIn(2500);

  // Schedule for the inital fade out.
  setTimeout(fadeQuotes, 6000);

  function fadeQuotes() {
    // Fade out the current quote.
    $("#quote"   current_quote).fadeOut(2500, function() {
    // Fade in the next quote.
    current_quote = (current_quote   1) 
    if(current_quote 1 > num_quotes)
    {
        current_quote=0;
    }
    current_quote = current_quote % num_quotes;
    $("#quote"   current_quote).fadeIn(2500);
    });


    // Set the fading interval, if it's not already set.
    if (fade_interval == null) {
      fade_interval = setInterval(fadeQuotes, 13010);
    }
  }


});
  

Комментарии:

1. Проблема в том, что движок Chrome версии 8 зависает javascript при переключении вкладок. Когда вы возвращаетесь назад, он запускает его в сверхбыстромем режиме. Это портит отображение. Я также ищу решение для этого.

Ответ №1:

Chrome устанавливает время ожидания min равным 1 секунде, когда страница находится на скрытой вкладке. Это немного странно.

Ответ №2:

Я не уверен, что это решение, однако некоторые избыточности в вашем коде могут вызывать проблему. Попробуйте это…

Демонстрация:http://jsfiddle.net/wdm954/beQxv/4 /

 $(document).ready(function(){

    // rotate quotes
    $(function() {
        var current_quote = 0;        
        $("#quote"   current_quote).fadeIn(2500);
        setInterval(function() {
            $("#quote"   current_quote).fadeOut(2500, function() {
                current_quote  ;
                if (current_quote   1 > $("#quotes p").length) current_quote = 0;
                $("#quote"   current_quote).fadeIn(2500);
            });
        }, 5000);
    });

}); //end doc ready
  

Комментарии:

1. Поэтому, даже если я запускаю ваш jsfiddle в Chrome, я вижу ту же проблему. Установите интервал в 1 секунду и посмотрите

2. Если ваш fadeIn равен 2500, а ваш fadeOut равен 2500, то ваш интервал должен быть не менее 5000.