2011-12-03 9 views
1

jqueryで特定のクリックイベントを停止したいスライドショー機能があります。スライドショー機能はここにある:クリックイベントでjavascript/jqueryで実行中の機能を停止する

function slider(){ 
    setInterval(function(){ 
    var cur = $('img.active'); 
    cur.fadeOut('fast'); 
    cur.removeClass('active'); 
    cur.css('opacity','0'); 
    cur.addClass("hidden"); 
    var nextimg; 
    if (!cur.hasClass("last")){ 
    nextimg = cur.next("img"); 
    } 
    else { 
    nextimg = cur.prev().prev().prev(); 
    } 
    nextimg.removeClass("hidden").fadeIn('slow').css('opacity','1').addClass('active'); 
    },5000); 
} 

私はキューから私の関数を呼び出し、その後、クリックイベントにキューをクリアすることができ、私はまさにそれをどのように使用できるかを確認してください.queueについて読んではなく、されていますか?私は、たとえそれが可能であっても、それを動作させるための構文を理解しているようには思えません。クリックして実行中の機能を停止するこの方法または別の方法に関するアドバイスがあれば幸いです。

+0

setIntervalはclearIntervalで元に戻すことができます。 参照: http://stackoverflow.com/questions/6886361/clearinterval-is-not-working – wrschneider

答えて

3

を、それが再帰のsetTimeoutの代わりのsetIntervalを使用することが一般的にお勧めです。私はその変更を加え、いくつかの構文の微調整を行いました。しかし、これはあなたが望むと思うものの基本的な実装です。

// Store a reference that will point to your timeout 
var timer; 

function slider(){ 
    timer = setTimeout(function(){ 
     var cur = $('img.active') 
       .fadeOut('fast') 
       .removeClass('active') 
       .css('opacity','0') 
       .addClass('hidden'), 
      nextimg = !cur.hasClass('last') ? cur.next('img') : cur.prev().prev().prev(); 
     nextimg.removeClass('hidden') 
      .fadeIn('slow') 
      .css('opacity','1') 
      .addClass('active'); 
     // Call the slider function again 
     slider(); 
    },5000); 
} 

$('#someElement').click(function(){ 
    // Clear the timeout 
    clearTimeout(timer); 
}); 
+1

うわー、その男のおかげで、私が書いたコードです。私の質問に答えるだけでなく、より洗練されたコードがどのように見えるのか教えてくれてありがとう。 – thesteve

1

setIntervalの結果を変数に格納します。

次に、clearIntervalを使用してそれを停止します。

+0

それはグローバル変数である必要がありますか? – thesteve

+0

必ずしもグローバルである必要はありませんが、クリックハンドラからアクセスできるようにするには、スライダ関数のスコープ外にある必要があります。 –

1

ストアsetIntervalによって返される値は、それをクリアするためにintervalIdを言う、あなたのクリックハンドラは次のようになります。それは価値がある何のため

function stopSlider() { 
    //prevent changing image each 5s 
    clearInterval(intervalId); 
    //stop fading the current image 
    $('img.active').stop(true, true); 
}