2012-04-08 14 views
2

私は、自動スライドショーを制御するためにsetTimeOutを使用しています。javascriptをトリガーするsetTimeOutイベントが早すぎる

(あなたがここでそれを見ることができます:。http://thingist.com/labs/ipad.shtmlを - 基本的に私が働いている間、見てかなり何かイメージがのredditのAPIから来ている)

コードはおよそ次のようになります。

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

パーフェクト。ありがとう:) –

+0

@ RyanMcDermott私の喜び! –

関連する問題