Javascript 将多个数组参数传递到幻灯片放映的setTimeout时出现问题

Javascript 将多个数组参数传递到幻灯片放映的setTimeout时出现问题,javascript,arrays,slideshow,settimeout,rotator,Javascript,Arrays,Slideshow,Settimeout,Rotator,我正在尝试创建一个简单的幻灯片,由3个旋转图像组成,当最后一个图像显示后,将立即重新开始,时间间隔为5000毫秒 <div id="slideshow">&nbsp;</div> <script type="text/javascript"> var imageArray = ['Image1','Image2','Image3']; var currentIndex = 0; nextPic = function(currentIndex,sli

我正在尝试创建一个简单的幻灯片,由3个旋转图像组成,当最后一个图像显示后,将立即重新开始,时间间隔为5000毫秒

<div id="slideshow">&nbsp;</div>

<script type="text/javascript">
var imageArray = ['Image1','Image2','Image3'];
var currentIndex = 0;

nextPic = function(currentIndex,slideshow) {

  var theHTML = '<img src="http://www.domain.com/Pics/Test-' + imageArray[currentIndex] + '.jpg">';
  document.getElementById("slideshow").innerHTML = theHTML;

  if (currentIndex < imageArray.length) {
      currentIndex = currentIndex + 1;
  }
    else {
      currentIndex = 0;
    }

  setTimeout("nextPic(" + currentIndex + ")", 5000);
}

nextPic(currentIndex, "slideshow");

</script>

var imageArray=['Image1','Image2','Image3'];
var currentIndex=0;
nextPic=函数(当前索引、幻灯片){
var theHTML='';
document.getElementById(“幻灯片”).innerHTML=HTML;
if(currentIndex

我发现的Javascript代码的每一个变体都产生了相同的结果:在最后一个图像(Test-Image3.jpg)之后,JS尝试在重置回第一个图像之前显示一个未定义的图像(“Test-undefined.jpg”)。除此之外,它工作得非常好,非常令人恼火。

您需要考虑这样一个事实,即在检查数组长度后添加一个

if (currentIndex < imageArray.length - 1) {
  currentIndex = currentIndex + 1;
}
else {
  currentIndex = 0;
}
但是,实际上根本不需要传递参数,因为函数可以只使用全局变量。(最好不要有一个,但既然你有,那么,你最好使用它。)

更改为:

  if (currentIndex < imageArray.length - 1) {
      currentIndex = currentIndex + 1;
  }
您可以使用:

currentIndex ++;

使用setInterval()的更干净的实现:

var slide = function(){
   //check if we are at the end of the array, either stop or replay.                               
   if (currentIndex == imageArray.length){
        currentIndex = 0; //replay slideshow

   /*to stop slideshow add this:
   *     window.clearInterval(slideInt)     
   *     return false;
   */

   }
     var theHTML = '<img src="http://www.domain.com/Pics/Test-' +    
                    imageArray[currentIndex] + '.jpg">';
     document.getElementById("slideshow").innerHTML = theHTML;
     currentIndex +=1;
}

  var imageArray = ['Image1','Image2','Image3'];
  var currentIndex = 0;
  var speed = 5000;
  var slideInt = window.setInterval(slide,speed); //skip a photo every 5000 milis
var slide=function(){
//检查我们是否在阵列的末尾,停止或重播。
if(currentIndex==imageArray.length){
currentIndex=0;//重播幻灯片
/*要停止幻灯片放映,请添加以下内容:
*窗口清除间隔(slideInt)
*返回false;
*/
}
var theHTML='';
document.getElementById(“幻灯片”).innerHTML=HTML;
currentIndex+=1;
}
var imageArray=['Image1','Image2','Image3'];
var currentIndex=0;
var速度=5000;
var slideInt=window.setInterval(滑动,速度)//每5000毫米跳过一张照片

完美!谢谢出于好奇,(currentIndex<3)为什么不工作?@user2097213你有没有。。。嗯,你在句子中间迷路了吗PThanks…javascript新手,很高兴这一次它没有丢失分号。
currentIndex ++;
var slide = function(){
   //check if we are at the end of the array, either stop or replay.                               
   if (currentIndex == imageArray.length){
        currentIndex = 0; //replay slideshow

   /*to stop slideshow add this:
   *     window.clearInterval(slideInt)     
   *     return false;
   */

   }
     var theHTML = '<img src="http://www.domain.com/Pics/Test-' +    
                    imageArray[currentIndex] + '.jpg">';
     document.getElementById("slideshow").innerHTML = theHTML;
     currentIndex +=1;
}

  var imageArray = ['Image1','Image2','Image3'];
  var currentIndex = 0;
  var speed = 5000;
  var slideInt = window.setInterval(slide,speed); //skip a photo every 5000 milis