在多个数组中旋转
Rotating through multiple arrays
我正在尝试使用以下 javascript 代码制作简单的幻灯片,但它对我不起作用。我对拼写进行了三次检查,确保所有元素都与我的 HTML.
相关联
Javascript:
var pic_rotation = ["pic1.jpg", "pic2.jpg", "pic3.jpg"],
cap_rotation = ["caption 1", "caption 2", "caption 3"];
var int = 0;
function rotatePicCap(){
if (int < pic_rotation.length){
int++;
}
else if (int == pic_rotation.length){
int = 0;
}
document.getElementById("pic").src = pic_rotation[int];
document.getElementById("cap").innerHTML = pic_rotation[int];
}
setInterval(function slideShow(){rotatePicCap()}, 4000);
HTML:
<div id="slideshow">
<img src="pic1.jpg" alt="Picture" id="pic">
<div id="cap">caption 1</div>
</div>
关于为什么这不起作用的任何想法?
问题出在这里:
if (int < pic_rotation.length) int++;
查看您的浏览器控制台 - 它会告诉您问题出在哪里。在最后一次迭代中,int
将与数组的长度相同。但是对于长度为 3 的数组,arr[3]
是未定义的。
最好使用模数:
function rotatePicCap(){
int = (int + 1) % pic_rotation.length;
另一件事 - 仅在您故意使用或插入 HTML 标记(可能存在安全和编码问题)时才使用 innerHTML
。当您设置或检索文本值时,请改用 textContent
。
document.getElementById("cap").textContent = pic_rotation[int];
你的代码大部分都写得很好。这个问题就像@CertainPerformance 所说的那样(if 语句)。
您正在检查并递增 int
,然后才显示您的信息。所以一开始int
是0,你先显示pic2
因为int
递增到1才显示。您的 if 语句正确检查 int
是否小于长度,然后在显示之前递增它。
进行以下更改就可以了:
function rotatePicCap(){
if (int == pic_rotation.length){
int = 0;
}
document.getElementById("pic").src = pic_rotation[int];
document.getElementById("cap").innerHTML = pic_rotation[int];
int++;
}
这仍然会增加,但你会在之前进行检查。如果 int
更大,则从 0 重新开始。
我正在尝试使用以下 javascript 代码制作简单的幻灯片,但它对我不起作用。我对拼写进行了三次检查,确保所有元素都与我的 HTML.
相关联Javascript:
var pic_rotation = ["pic1.jpg", "pic2.jpg", "pic3.jpg"],
cap_rotation = ["caption 1", "caption 2", "caption 3"];
var int = 0;
function rotatePicCap(){
if (int < pic_rotation.length){
int++;
}
else if (int == pic_rotation.length){
int = 0;
}
document.getElementById("pic").src = pic_rotation[int];
document.getElementById("cap").innerHTML = pic_rotation[int];
}
setInterval(function slideShow(){rotatePicCap()}, 4000);
HTML:
<div id="slideshow">
<img src="pic1.jpg" alt="Picture" id="pic">
<div id="cap">caption 1</div>
</div>
关于为什么这不起作用的任何想法?
问题出在这里:
if (int < pic_rotation.length) int++;
查看您的浏览器控制台 - 它会告诉您问题出在哪里。在最后一次迭代中,int
将与数组的长度相同。但是对于长度为 3 的数组,arr[3]
是未定义的。
最好使用模数:
function rotatePicCap(){
int = (int + 1) % pic_rotation.length;
另一件事 - 仅在您故意使用或插入 HTML 标记(可能存在安全和编码问题)时才使用 innerHTML
。当您设置或检索文本值时,请改用 textContent
。
document.getElementById("cap").textContent = pic_rotation[int];
你的代码大部分都写得很好。这个问题就像@CertainPerformance 所说的那样(if 语句)。
您正在检查并递增 int
,然后才显示您的信息。所以一开始int
是0,你先显示pic2
因为int
递增到1才显示。您的 if 语句正确检查 int
是否小于长度,然后在显示之前递增它。
进行以下更改就可以了:
function rotatePicCap(){
if (int == pic_rotation.length){
int = 0;
}
document.getElementById("pic").src = pic_rotation[int];
document.getElementById("cap").innerHTML = pic_rotation[int];
int++;
}
这仍然会增加,但你会在之前进行检查。如果 int
更大,则从 0 重新开始。