0

ページの 1 つにイメージ ローテーターを実装していますが、他の 2 つのページでもこのコードを再利用したいと考えています。また、各ページが他のページとは異なる順序で画像を回転させたいと思います。これは、異なる配列を宣言し、一意の ID で呼び出すことでカバーされると思いました。

コードは次のとおりです。

 var ImageArr1 = new Array("/assets/function.jpg","assets/takeaway.jpg","/assets  /delivery.jpg");
 var ImageHolder1 = document.getElementById('Rotating1');


 var ImageArr2 = new Array("/assets/takeaway.jpg","/assets/function.jpg","/assets/delivery.jpg");
 var ImageHolder2 = document.getElementById('Rotating2');

  function RotateImages(whichHolder,Start)
  {
  var a = eval("ImageArr"+whichHolder);
   var b = eval("ImageHolder"+whichHolder);
  if(Start>=a.length)
  Start=0;
  b.src = a[Start];
  window.setTimeout("RotateImages("+whichHolder+","+(Start+1)+")",3000);
  }

  RotateImages(1,0);
  RotateImages(2,0);

そして、私のHTMLは次のとおりです-Page1

<img src="/assets/function.jpg" name="Rotating" id="Rotating1" width="260" height="180" alt="">

ページ2

<img src="/assets/takeaway.jpg" name="Rotating" id="Rotating2" width="260" height="180" alt="">

私はゆっくりとJavascriptを学んでいますが、これは私を困惑させました

どんな助けでも大歓迎

4

1 に答える 1

1

あなたが抱えている問題は、実際にはエラーです。b.src を呼び出すことにより、b が定義されていることをアサートしますが、ImageHolder がそこにない可能性があります。特に、ページ 1 で RotateImage(2... を呼び出すか、ページ 2 で RotateImage(1... を呼び出します。

最初に試すことは、脳から eval を削除することです。window["ImageArr"+whichHolder] を使用するだけで、はるかに優れています。

次に、関数の末尾 (最後の 2 行) を次のように置き換えます。

if(b) {
    b.src = a[Start];
    window.setTimeout("RotateImages("+whichHolder+", "+(Start+1)+")", 3000);
}

次に、文字列の代わりに関数を使用して setTimeout を呼び出す方法を学習できます。

window.setTimeout(function() {
    RotateImages(whichHolder, Start+1);
}, 3000);

そして最後に、これはより多くのコード規則であり、従来の変数と関数は最初の文字が大文字ではありません。ということで、rotateImages で起動するかもしれません。

于 2012-06-11T21:28:54.113 に答える