0

jQueryで少しフェードイン/フェードアウトのカルーセルを作成しましたが、これまでのところすべての標準準拠ブラウザでうまくいきました。 Internet Explorerの9JavaScript/jQueryのインターバルがInternet Explorerで2回実行されました

以外カルーセルは次の項目にsetIntervalを使用してすべての15000ミリ秒を転がるように設定されていると、それはまた、窓の外に焦点を当てたときに、それを一時停止するwindow.addEventListenerを使用しています。

私はInternet Explorer 9でテストしていたので、毎回各間隔が2回ずつ実行されることに気付きました。次の項目に切り替えて15秒待つ代わりに(他のブラウザでも起こります)次の間隔を待つ前に項目を削除します。

コードは長すぎる可能性がありますが、ページ自体はhttp://www.stefanvignir.de/にあり、JavaScriptファイルはhttp://www.stefanvignir.de/carousel.jsにあります。

IE9で正しく動作させるにはどうすればよいですか?JavaScriptをIEに適用する際には避けるべきことがありますか?

+0

Firefox 5.01でも同様です。あなたのコードではあいまいな部分かもしれません。 – FK82

答えて

2

すべてが起動しているときにフォーカスリスナーが呼び出されていると思います。

if(!carouselIntervalId) 
    carouselIntervalId = setInterval(...); 

そして、私たちはここにすべて適切に妄想しているので、両方setInterval呼び出し前にそのチェックを入れて:あなたはタイマーを開始する前にcarouselIntervalIdを持っている場合は、チェックしてみてください可能性があります。

あなたはタイマーを停止したとき、あなたはcarouselIntervalIdを無効化したいと思います:

if(carouselIntervalId) 
    clearInterval(carouselIntervalId); 
carouselIntervalId = null; 

もちろん上記の周りのすべてのclearInterval通話をしたいと思います。また

、私はあなたの注意を持っていながら、私はあなたが2回の異なるsetInterval呼び出していることに注意してください(?):

setInterval(function() { carouselNext() }, 15000); 
// And later... 
setInterval(function() { if (animate == true) { carouselNext() } }, 15000); 

あなたが混乱してバグを避けるために、彼らは同じようにしたいかもしれませんが。

+2

IEデバッガで、起動時にコードが2つのインターバルタイマーを設定していることを確認できます.1つは初期化イベントで、もう1つは初期フォーカスイベントです。修正プログラムはmuが既に実行中の場合に新しい間隔を設定しないと言われます。 – jfriend00

+0

@ jfriend00:ありがとう、私は私のIEのテスト装置をドラッグしたくなかった。 –

+0

'carouselIntervalId'をチェックするとそのトリックが完了したようです。何らかの理由で、 'carouselIntervalId'の新しい値を設定すると、単に古いインターバルを削除し、新しいインターバルに置き換えるだけで済むのです。 – aldavigdis

関連する問題