带有开始/停止按钮的Javascript显示(图片数组)不工作,错误:src未定义

带有开始/停止按钮的Javascript显示(图片数组)不工作,错误:src未定义,javascript,arrays,setinterval,Javascript,Arrays,Setinterval,当我启动diashow时,我得到的结果是:uncaughttypeerror:无法读取指向函数的未定义的属性'src':runPicGal(见下文)。希望你能帮忙。注:奇怪的是,我看到图片改变了一次,然后我得到了错误 完整JS文件: var picForDiashow; var diashowPicArray = []; var diashowPicArrayIndex = 0; diashowPicArray [0] = new Image(); diashowPicArray [0].sr

当我启动diashow时,我得到的结果是:
uncaughttypeerror:无法读取指向
函数的未定义的属性'src'
runPicGal
(见下文)。希望你能帮忙。注:奇怪的是,我看到图片改变了一次,然后我得到了错误

完整JS文件:

var picForDiashow;
var diashowPicArray = [];
var diashowPicArrayIndex = 0;

diashowPicArray [0] = new Image(); diashowPicArray [0].src = "./pics/1.jpg";
diashowPicArray [1] = new Image(); diashowPicArray [0].src = "./pics/2.jpg";
diashowPicArray [2] = new Image(); diashowPicArray [0].src = "./pics/3.jpg";
diashowPicArray [3] = new Image(); diashowPicArray [0].src = "./pics/4.jpg";
diashowPicArray [4] = new Image(); diashowPicArray [0].src = "./pics/5.jpg";



function initForDiashow () {

    picForDiashow = document.getElementById("diashowPic");
}

window.onload = initForDiashow;





function startDiashow () {

    picInterval = window.setInterval(runPicGal, 1000);
}





function stopDiashow () {

    window.clearInterval(picInterval);
}




function runPicGal () {

    diashowPicArrayIndex++;

    if (diashowPicArrayIndex > diashowPicArray.length) {
        diashowPicArrayIndex = 0;
    } 
    picForDiashow.src = diashowPicArray[diashowPicArrayIndex].src;

}

您总是将元素添加到数组的第一个位置。因此,只有第一个元素,
diashowPicArray[0]
可以访问。将初始化更改为以下内容:

diashowPicArray [0] = new Image(); diashowPicArray [0].src = "./pics/1.jpg";
diashowPicArray [1] = new Image(); diashowPicArray [1].src = "./pics/2.jpg";
diashowPicArray [2] = new Image(); diashowPicArray [2].src = "./pics/3.jpg";
diashowPicArray [3] = new Image(); diashowPicArray [3].src = "./pics/4.jpg";
diashowPicArray [4] = new Image(); diashowPicArray [4].src = "./pics/5.jpg";
此外,在比较中,不应使用
diashowPicarayIndex>diashowPicArray.length
。否则,您将尝试访问diashowPicArray[5]
,这是不允许的。改用
==

diashowPicArrayIndex++;
if (diashowPicArrayIndex == diashowPicArray.length) {
    diashowPicArrayIndex = 0;
} 
或者,使用模块化算法简化上述行:

diashowPicArrayIndex = (diashowPicArrayIndex + 1) % diashowPicArray.length;

对不起,你当然是对的。现在我看到diashow正在运行,但当diashow到达数组的末尾并再次从0开始时,我再次遇到此错误。为什么?您应该改为使用
diashowPicarayIndex==diashowPicArray.length
。否则,您将尝试访问
length
位置的数组,该位置不存在,因为数组是0索引的。