2014-12-17 2 views
0

У меня есть функция, которая выполняется во время поиска (она вызывается каждые 5 секунд). Пока он запускает «Извлечение результатов ...» Записывает на странице одно письмо за раз. Это работает нормально, но если пользователь переходит на другую вкладку, а затем возвращается, сообщение становится чем-то вроде: «Rvsei.tn.rg.i eRveisnugl tRse». Затем в течение следующих двух циклов оно возвращается к тому, что должно быть. Мне интересно, если есть способ, я могу просто перезапустить функцию, когда вкладка снова станет активной вкладкой. Хотя это забавно видеть это, это не то, что я намеревался. Здесь функция у меня есть:Пауза jquery Функция, когда вкладка не активна

var showText = function (target, message, index, interval) { 
if (index < message.length) { 
    $(target).append(message[index++]); 
    setTimeout(function() { showText(target, message, index, interval); }, interval); 
} 
} 

function Loading() { 
    $("#loading").html(''); 
    showText("#loading", "Retrieving Results...", 0, 200); 
} 

Edit: Я интересно, если это что-то делать с функцией, которая вызывает функцию Загрузка. Я заметил, что это происходит только в том случае, если я нахожусь на другой вкладке, когда она должна обновляться, и чем дольше вы уходите, тем хуже это, что предполагает, что, возможно, когда вы вернетесь, она пытается вызвать загрузку столько раз, сколько предполагалось всем сразу. Это мой таймер:

var refreshInterval = 5 * 1000, 
isDone = false; 

if (!isDone) { 
setTimeout(test_function, refreshInterval) 
} 

Так что, я думаю, мне нужно выяснить, как приостановить этот таймер onblur.

+0

где вы сбрасываете индекс? вы говорите о вкладке jQuery или вкладке браузера? – Born2Code

+0

При запуске функции индекс устанавливается равным 0. Я думаю .. –

+0

@ChrisBuckley Piece at OP появляется, чтобы распечатать полное сообщение при переходе на другую вкладку, здесь http://jsfiddle.net/t6ouo762/. Если возможно, можно создать/изменить jsfiddle для воспроизведения «Rvsei.tn.rg.i eRveisnugl tRse»? Спасибо – guest271314

ответ

0

Я обновляю свой ответ для подбора ваших потребностей. Это будет работать для меня. Необходимыми функциями являются «размытие» и «фокус», которые вы должны привязать к окну-объекту. При выходе вы сохраняете текущий индекс. После того, как пользователь просмотрит вкладку, функция должна повториться.

// EDIT:

Я обновить скрипку. Проверьте это: http://jsfiddle.net/t6ouo762/3/

<head> 
     <script type="text/javascript" src="jquery.min.js"></script> 
</head> 
<body> 
<div id="loading"></div> 
    <script type="text/javascript"> 
    var isOnTab = true; 
    var myTarget = "#loading"; 
    var myText = "Retrieving Results..."; 
    var myIndex = 0; 
    var myInterval = 200; 

     $(document).ready(function() { 

      Loading(); 
      $(window).bind("blur", function() { 
       isOnTab = false; 
      }); 
      $(window).focus(function() { 
       if(!isOnTab) 
       { 
        isOnTab = true; 
        showText(myTarget,myText,myIndex,myInterval); 
       } 
      }); 
     }); 


     var showText = function (target, message, index, interval) { 
      myIndex = index; 
      if (index < message.length && isOnTab) { 
       $(target).append(message[index++]); 
       setTimeout(function() { 
        showText(target, message, index, interval); 
        }, interval); 
      } 
     } 

     function Loading() { 
      $("#loading").html(''); 
      showText(myTarget,myText,myIndex,myInterval); 
     } 
    </script> 
</body> 
Смежные вопросы