2

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を使用)で「next」関数をトリガーした場合でも、setTimeOutコールバック関数がキューに入れられることです。したがって、画像を「次」にしますが、コールバックが発生すると、画像は再び「次」になります。連続して何度も「次へ」進むと、約30秒の遅延バーストが続きます。(キューに入れられたすべてのタイムアウトが発生すると)。

setTimeOutのコールバックを時期尚早にトリガーする方法はありますか?または、それを完全にデキューするだけですか?

4

1 に答える 1

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);
于 2012-04-08T17:12:49.110 に答える