2012-01-20 10 views
1

特定のリンクをマウスオーバーするときにdivの内容を置き換えるコードをまとめています。その後、チェンジャー機能を追加してコンテンツの置換を自動的に繰り返しました。私はマウスオーバーとマウスアウトのフラグを設定して、実際にマウスオーバーで停止するチェンジャー機能を得ることができますが、マウスアウト時に再び起動させる方法を理解できません。アドバイスをいただければ幸いです。フラグによって再起動された後の再起動のループ

var pause=false; 
$('.banner-nav a').mouseover(function() { 
    pause=true; 
    setFeature(this); 
    return false; 
}); 
$('.banner-nav a').mouseout(function() { 
    pause=false; 
}); 
changer(0, 5000); 

function setFeature(f) { 
    var m = $(f).attr('rel'); 
    $('.banner-nav a').not(f).removeClass('active'); 
    $(f).addClass('active'); 
    $('#featureContainer').html($(m).html());  
} 
function changer(index, interval) { 
    var buttons = $('.trigger'), 
    buttons_length = buttons.length; 
    var button = buttons.eq(index % buttons_length); 
    setFeature($(button)); 
    setTimeout(function() { 
     if (!pause) { 
      changer(++index, interval); 
     } 
    }, interval) 
} 
+0

の可能複製(http://stackoverflow.com/questions/2626005/)、[ジャバスクリプト:のsetTimeoutを(一時停止);] [setTimeoutメソッド呼び出しを一時停止する方法?](http://stackoverflow.com/question/3969475 /)、[Javascript setTimeout function](http://stackoverflow.com/questions/7191769/) – outis

答えて

2

問題はchangerは、独自の遅延実行のために責任があるということですが、それを一時停止すると、スケジュールされた実行を停止します。別の問題は、次のスケジュールされた実行(もしあれば)が、一時停止後にまだ起こるということです。

setTimeoutの代わりにsetIntervalを使用してください。フラグを使用する代わりに、一時停止する間隔をクリアし、一時停止する間隔をもう一度開始してください。

(function() { 
    var index=0; 

    function changer() { 
     var buttons = $('.trigger'), 
     buttons_length = buttons.length; 
     var button = buttons.eq(index % buttons_length); 
     setFeature($(button)); 
     ++index; 
    } 

    var changerInterval, 
     period = 5000; 

    function startChanger() { 
     if (! changerInterval) { 
      changerInterval = setInterval(changer, interval); 
     } 
    } 
    function stopChanger() { 
     clearInterval(changerInterval); 
     changerInterval = 0; 
    } 

    $('.banner-nav a').mouseover(function() { 
     stopChanger(); 
     setFeature(this); 
     return false; 
    }); 
    $('.banner-nav a').mouseout(function() { 
     startChanger(); 
    }); 

    /* could implement other functions to e.g. change the period */ 
    function setChangerPeriod() { 
     ... 
    } 
    window.setChangerPeriod = setChangerPeriod; 
    ... 
}) 
+0

こんにちは。私はこれを実装しようとしたが、私は何かが欠けているに違いないと思う。チェンジャーをまったく燃やさないようです。私はここにjsfiddleをセットアップしました.http://jsfiddle.net/F855X/2/ – Brian

+0

Outis、私はそれを働かせました。再度、感謝します。 – Brian