【发布时间】:2018-08-13 15:42:14
【问题描述】:
我是一名学习基本 HTML/Javascript 的学生,为了完成家庭作业,我被分配使用 HTML/Javascript 制作幻灯片。我刚刚学习了数组、函数和变量,所以我对一切都很陌生。
因此,对于这个幻灯片分配,我必须放置两个按钮来开始/停止幻灯片,以及两个按钮可以转到幻灯片的下一张或上一张照片,当我按下下一张/上一张按钮时,它应该转到下一张/上一张幻灯片并停止幻灯片放映。
对于我的幻灯片,我使用数组来显示基于幻灯片编号的照片、标题和标题标题,表示为变量“i”。
但是我的幻灯片放映遇到了一些问题。在这里粘贴我的代码后,我会解释。我使用了标签,所以我没有外部 Javascript 文件。
请不要担心图片来源,因为我已经整理好了,而且,也无需担心那个 CSS 文件。
这是我的代码:
img {
display: block;
margin-left: auto;
margin-right: auto;
}
h1 {
font-family: Tahoma, Geneva, sans-serif
}
#captiontitle {
color: blue;
font-family: Impact, Charcoal, sans-serif;
}
#caption {
font-family: "Comic Sans MS", cursive, sans-serif;
}
<!DOCTYPE html>
<html>
<head>
<title>HW: Slideshow</title>
<link rel="stylesheet" href="slideshow.css">
</head>
<body>
<h1 align="center">Slideshow</h1>
<h3 align="center">(Please note that the time transition between slides is one second. Thank you!)</h3>
<img name="banner" width="800" height="400" class="center">
<h1 id="captiontitle" align="center"></h1>
<figcaption id="caption" align="center"></figcaption>
<button id="start" onclick="transition()">Start</button>
<button id="stop" onclick="stoptransition()">Stop</button>
<button id="next" onclick="nextphoto()">Next Photo</button>
<button id="previous" onclick="previousphoto()">Previous Photo</button>
<p id="firsti"></p>
<p id="ivalue"></p>
<p id="timevalue"></p>
<script>
//Images//
var images = [];
var i = 0;
var time = 1000;
images[0] = "img0.jpg";
images[1] = "img1.jpg";
images[2] = "img2.jpg";
images[3] = "img3.jpg";
images[4] = "img4.jpg";
images[5] = "img5.jpg";
var captitle = [];
captitle[0] = "Image 0"
captitle[1] = "Image 1"
captitle[2] = "Image 2"
captitle[3] = "Image 3"
captitle[4] = "Image 4"
captitle[5] = "Image 5"
var cap = [];
cap[0] = "This is the description of Image 0."
cap[1] = "This is the description of Image 1."
cap[2] = "This is the description of Image 2."
cap[3] = "This is the description of Image 3."
cap[4] = "This is the description of Image 4."
cap[5] = "This is the description of Image 5."
document.banner.src = images[i];
document.getElementById("caption").innerHTML = cap[i];
document.getElementById("captiontitle").innerHTML = captitle[i];
function transition(){
document.banner.src = images[i];
document.getElementById("caption").innerHTML = cap[i];
document.getElementById("captiontitle").innerHTML = captitle[i];
if(i < images.length - 1){
i = i + 1;
} else {
i = 0;
}
document.getElementById("ivalue").innerHTML = i;
stopslideshow = setTimeout("transition()", time);
}
function stoptransition(){
clearTimeout(stopslideshow);
document.getElementById("ivalue").innerHTML = i;
}
function nextphoto(){
if(i < images.length - 1){
i = i + 1;
} else {
i = 0;
}
document.banner.src = images[i];
document.getElementById("caption").innerHTML = cap[i];
document.getElementById("captiontitle").innerHTML = captitle[i];
document.getElementById("ivalue").innerHTML = i;
clearTimeout(stopslideshow);
}
function previousphoto(){
i = i - 1;
if(i < 0){
i = images.length - 1;
}
document.banner.src = images[i];
document.getElementById("caption").innerHTML = cap[i];
document.getElementById("captiontitle").innerHTML = captitle[i];
document.getElementById("ivalue").innerHTML = i;
clearTimeout(stopslideshow);
}
</script>
</body>
</html>
既然你已经阅读了我的代码,让我来解决我的幻灯片问题。
第一次加载页面时,下一个/上一个按钮可以正常工作。但是,当我按下开始按钮后按下下一个/上一个按钮时,就会出现问题。
因此,由于某种原因,当我按下开始按钮时,下一张幻灯片(应该是 images[1]、cap[1] 和 captitle[1])并没有立即出现。它从 images[0]、cap[0] 和 captitle[0] 开始。不过,有趣的是,我的变量 i 正在根据我按下的按钮正确地增加/减少,但图像并没有像我希望的那样增加/减少。
这就是为什么我在顶部的代码中包含了这一点:
<p id="firsti"></p>
<p id="ivalue"></p>
<p id="timevalue"></p>
我加入了这一点,试图找出为什么这些图像有点不稳定。所以基本上,当我按下开始按钮时, i 值也会显示。当我按下开始按钮时,变量 i 将显示为“1”,但图像、标题和标题标题不会改变。它将保留在 images[0]、title[0] 和 captitle[0]。
另一个奇怪的问题,就像我上面所说的,是我按下开始/停止按钮后的下一个/上一个按钮。当我按下下一个按钮时,显示屏会跳过前一张幻灯片而不是转到下一张,对于上一个按钮,它会比我想要的多一张幻灯片。
最后,我遇到的另一个错误是,当我多次按下“开始”时,该功能会重复执行多次,并且会快速跳过幻灯片。我不知道如何使启动功能只工作一次。我尝试了很多方法,但都没有奏效。
这很长,很抱歉,但老实说,我被卡住了,我非常接近完成这个幻灯片作业,但我遇到了几个错误。
感谢您的帮助。谢谢!
编辑:有人要我的 CSS,所以我把它放在这里:
img {
display: block;
margin-left: auto;
margin-right: auto;
}
h1 {
font-family: Tahoma, Geneva, sans-serif
}
#captiontitle {
color: blue;
font-family: Impact, Charcoal, sans-serif;
}
#caption {
font-family: "Comic Sans MS", cursive, sans-serif;
}
【问题讨论】:
-
发布你的css,我可以运行你的例子
-
我编辑了我的帖子并将 CSS 代码放在了最底部。我认为即使没有 CSS 也是不言自明的。因为您可以清楚地看到,当您在按下开始按钮后按下下一个/上一个按钮时,它们会跳过/返回一张幻灯片,而不是我想要的。但我还是把 CSS 放进去
-
尝试一次只回答一个问题。您只能有一个接受的答案。如果您的解决方案分布在两个单独的答案中,则您无法在应计分的地方完全计分。
-
我有时间帮助你的一件事是你可能想要 setInterval 而不是
setTimeout("transition()", time);并且它应该是setInterval(transition, time);注意transition没有引号和括号,否则你调用函数而不是告诉 setInterval/timeout 那是你想要调用的函数。此外,您应该在其自己的函数中调用 setInterval,因此您必须将“开始”按钮 onclick 更改为使用 setInterval 的新函数(并从 transition() 中删除 setTimeout)。这有助于解决开始时的一些奇怪问题
标签: javascript html arrays