2013-11-23 3 views
0

У меня есть функция timer(), которую я хочу запустить сразу после загрузки страницы, а затем запускать каждую секунду после этого.Как запустить скрипт на загрузку страницы, а затем использовать setInterval

В настоящее время у меня есть следующий код, используя setInterval:

$(document).ready(function() { 
var timer = function(){ 
    ... 
} 

timer(); 

setInterval(function(){ 
     timer(); 
}, 1000); 
}); 

Примечание, я не просто хочу, чтобы использовать setInterval в одиночку, так как это создает задержку 1сек после загрузки страницы

Однако, использование таймера(); кажется, останавливает другой скрипт на странице, работающей. Есть идеи? В консоли нет ошибок.

ответ

2

Я хотел бы использовать вместо setTimeout():

$(document).ready(function() { 
    var timerLoop; 
    var timer = function(){ 
       ... 
      timerLoop = setTimeout(timer, 1000); 
     }; 
    timer(); 
} 

Обратите внимание на timerLoop переменную, которую вы можете использовать, чтобы остановить "интервал" (clearTimeout(timerLoop);), если это необходимо.

Timeouts не являются асинхронными, они просто синхронизированы. Если есть еще один скрипт, исполняемый скрипт выполняется после завершения предыдущего скрипта.

Я бы предпочел setTimeout() вместо seInterval(), поскольку последнего имеет недостаток: если есть другой скрипт блокирует выполнение синхронизированных вызовов, установленных setInterval() эти вызовы сложены, и когда сценарий блокировки будет завершен, все укладывается звонки выполняются как можно быстрее. Обычно это нежелательное поведение.

+0

Спасибо, это все еще не позволяет другим скриптам нагрузки, хотя в .ready функции? – alias51

+0

Выполнение тайм-скрипта также блокирует другие скрипты. Если вы скрипты _loading_ в скрипте, то сама загрузка выполняется asynchrounously, но ничего не будет выполнено до завершения текущего скрипта. – Teemu

+0

@ alias51 Чтобы показать вам пример того, как 'setInterval()' отличается от 'setTimeout()', пожалуйста, проверьте ["a-mess-fiddle"] (http://jsfiddle.net/BKupY/3/) (с не-IE-браузер), перейдите на другую вкладку некоторое время и вернитесь к «a-mess-fiddle». Затем сделайте то же самое на [«work-fiddle»] (http://jsfiddle.net/BKupY/5/), вы увидите разницу. – Teemu

0

Попробуйте console.log(timer), и вы ясно увидите, что это число, а не функция, которую вы можете вызвать.

Вместо этого вы должны вручную вызвать функцию, а также установить таймер.

function timer() { 
    // do something 
} 
$(function() { 
    timer(); 
    setInterval(timer,1000); 
}); 

В качестве альтернативы, вы можете использовать повторяющиеся тайм:

function timer() { 
    // do something 
    setTimeout(timer,1000); 
} 
$(timer); 
Смежные вопросы