带有开始/停止按钮的Javascript显示(图片数组)不工作,错误:src未定义
当我启动diashow时,我得到的结果是:带有开始/停止按钮的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
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索引的。