4

そこで、個人用の小さな jQuery プラグインを作成しようとしています。関数は完了しましたが、setInterval() 関数が何らかの理由で 2 回起動し、その理由がわかりません。最初は 2 回起動しないように見えますが、テスト (間隔の各トリガーにアラートを追加) によって 2 回起動することがわかっています。数分で非常に速くなります) これは 2 回起動した結果です。

誰かがこれを修正する方法を教えてもらえますか?

Javascript コード:

(function( $ ) {

  $.fn.imageSwap = function(img) {
  var src = this.attr("src");
  var id = this;
  id.fadeToggle("fast", function(){
  id.attr("src", img);
  id.fadeToggle("fast");
  });
  return this;
  };

 })( jQuery );



(function( $ ) {

  $.fn.slideShow = function(array, time) {
  var i = -1;
  var num = array.length;
  var id=this;

  var interval = setInterval(function(){
  i++
  if(i>(num)-1){i=0}
  id.imageSwap(array[i]);
  },time);

  };

ページコード:

<script>

$("#slideshow").slideShow([
"http://www.rta.nsw.gov.au/licensing/images/dkt_faqs/number1.gif",
"http://www.rta.nsw.gov.au/licensing/images/dkt_faqs/number2.gif",
"http://www.rta.nsw.gov.au/licensing/images/dkt_faqs/number3.gif",
"http://www.rta.nsw.gov.au/licensing/images/dkt_faqs/number4.gif"
], 1000);

</script>

<img id="slideshow" src=""/>
4

1 に答える 1

2

ここで問題を絞り込み、タブを切り替えたときにのみ発生していることに気付きました。ということで、ちょっと検索してみると、なんとなくわかってきました。

setInterval設計上、Chrome は呼び出しを積み重ねているようです。したがって、非アクティブなタブに戻ると、たまたまそれらが連続して実行されます。

SO の他の関連する質問でいくつかの回避策を確認できます。

于 2013-01-06T16:15:37.747 に答える