2012-04-08 4 views
2

Я использую setTimeOut для управления автоматическим слайд-шоу.Триггер javascript setTimeOut события преждевременно

(Вы можете увидеть здесь: http://thingist.com/labs/ipad.shtml - в основном что-то довольно, чтобы смотреть, пока я работаю Изображения приходят из API Reddit в.)

код выглядит примерно так:

next() { 
    image_url = images[key]["url"] 
    $("#image").html(vsprintf("<img src='%s'>", [image_url])); 
    key++; 
    setTimeOut(function() { next(); }, 30000); 

Проблема в том, что если я запускаю «следующую» функцию по-другому (например, с помощью div onclick), функция обратного вызова setTimeOut по-прежнему ставится в очередь. Таким образом, я буду «следующим» образом, но когда обратный вызов срабатывает, он снова «следующий». Если вы «следуете» много раз подряд, есть примерно 30 секунд с задержкой, которая последует за вами. (После того, как весь тайм-аут в очереди поставлен в очередь).

Есть ли способ преждевременного запуска обратного вызова setTimeOut? Или просто удалить его вообще?

+0

's/setTimeOut/setTimeout /' –

ответ

3

Вы можете использовать clearTimeout(), чтобы очистить ранее установленный таймаут.

var timeout; 
function next() { 
    image_url = images[key]["url"] 
    $("#image").html(vsprintf("<img src='%s'>", [image_url])); 
    key++; 
    timeout = setTimeout(function() { next(); }, 30000); 
} 

// Clear the timeout by calling clearTimeout() 
window.clearTimeout(timeout); 
+0

Perfect. Спасибо :) –

+0

@RyanMcDermott Мое удовольствие! –

Смежные вопросы