我是一名学习基本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>
现在你已经阅读了我的代码,让我用幻灯片来解决我的问题。
第一次加载页面时,下一个/上一个按钮可以正常工作。但是,当我按下“开始”按钮后按下一个/上一个按钮时会出现问题。
因此,出于某种原因,当我按下开始按钮时,下一张幻灯片(应该是图像[1],上限[1]和后悔[1])不会立即出现。它从图像[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]。
另一个奇怪的问题,就像我上面说的那样,是按下开始/停止按钮后的下一个/上一个按钮。当我按下下一个按钮时,显示屏会向前跳过一张幻灯片,而不是转到下一张按钮,而对于上一个按钮,它会再往前一张幻灯片,而不是我喜欢的那张。
最后,我遇到的另一个问题是,当我按下Start多次时,该功能会在按下它时重复多次,并且会快速跳过幻灯片。我不知道如何使启动功能只工作一次。我尝试了很多东西,但没有一个能奏效。
这很长,我很抱歉,但老实说我很困难,而且我已经接近完成这个幻灯片任务了,但我遇到了几个错误。
帮助表示赞赏。谢谢!
编辑:有人问我的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;
}
答案 0 :(得分:0)
增量计数器并设置图像时,需要保持一致。使用transition
方法,您将设置图像然后递增。使用next
和previous
进行递增和设置。所以你要去跳过。
您还应该在>强行前进或后退之前停止过渡。
使用变量来保存转换的状态,并使用它来确定转换是否应该开始。我在下面使用了transitionStarted
。您会注意到,现在有一种方法可以显式启动转换,另一种方法可以实际运行转换。
如果还使用JSON表示法使用对象数组并减少重复代码来优化代码。这将为您提供基本对象的良好一步。
var i = 0;
var time = 1000;
var banner = document.banner;
var imageTitle = document.getElementById("captiontitle");
var imageCaption = document.getElementById("caption");
var slideShowInterval;
var transitionStarted = false;
var imageObj = [{
"src": "https://www.fillmurray.com/800/400",
"title": "Title 0",
"Description": "Description 0"
},
{
"src": "http://www.placecage.com/800/400",
"title": "Title 1",
"Description": "Description 1"
},
{
"src": "http://www.placecage.com/g/800/400",
"title": "Title 2",
"Description": "Description 2"
},
{
"src": "http://www.placecage.com/c/800/400",
"title": "Title 3",
"Description": "Description 3"
},
{
"src": "http://www.placecage.com/gif/800/400",
"title": "Title 4",
"Description": "Description 4"
},
{
"src": "https://www.fillmurray.com/g/800/400",
"title": "Title 5",
"Description": "Description 5"
}
];
setImage(imageObj[i]);
function setImage(imageObject) {
banner.src = imageObject.src;
imageTitle.innerHTML = imageObject.title;
imageCaption.innerHTML = imageObject.Description;
}
function startTransition()
{
if(!transitionStarted){
transition();
transitionStarted = true;
}
}
function transition() {
if (i < imageObj.length - 1) {
i++;
} else {
i = 0;
}
setImage(imageObj[i]);
document.getElementById("ivalue").innerHTML = i;
slideShowInterval = setTimeout("transition()", time);
}
function stoptransition() {
clearInterval(slideShowInterval);
document.getElementById("ivalue").innerHTML = i;
transitionStarted = false;
}
function nextphoto() {
stoptransition();
if (i < imageObj.length - 1) {
i = i + 1;
} else {
i = 0;
}
setImage(imageObj[i]);
}
function previousphoto() {
stoptransition();
i = i - 1;
if (i < 0) {
i = imageObj.length - 1;
}
setImage(imageObj[i]);
}
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;
}
<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="startTransition()">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>