Javascript 图片幻灯片迭代 - 为什么最后一张图片排在第一位
Javascript image slideshow iteration - why is the last image first
我正在尝试创建一个小型幻灯片。幻灯片由六张图片组成,每张图片都有自己的标题。还有一个静态的通用标题。
下面的代码有效,但它首先显示最后一张图片,然后跳过第一张图片并循环访问其余图片。第一轮结束后一切正常,请问为什么会这样?
CSS
.imwrap {
max-width: 500px;
margin: 0 auto;
position: relative;
font-family: Roboto;
}
.imgsx {
position: absolute;
transition: opacity 1.5s ease-in;
max-width: 99%;
border-radius: 13px;
}
.text {
color: white;
font-weight: bolder;
font-size: 15px;
padding: 8px 12px;
position: absolute;
margin-top: 65%;
left: 50%;
transform: translate(-50%);
text-align: center;
transition: opacity 1.5s ease-in;
width: fit-content;
z-index: 2000;
opacity: 0;
display: block;
text-align: center;
}
.numbertext {
color: blue;
font-size: 12px;
padding: 8px 12px;
position: absolute;
top: 0;
background-color: rgba(255, 255, 255, 0.6);
border-top-right-radius: 8px;
border-bottom-right-radius: 8px;
z-index: 100;
}
.imgsx+.imgsx {
opacity: 0;
}
HTML
<div class="imwrap">
<div class="numbertext">with kind permission from picturesofengland.com</div>
<img class="imgsx" src="./trip/railway.webp" alt="Railway">
<div class="text">Swanage preserved railway - by Jack Rickard ©</div>
<img class="imgsx" src="./trip/boats.webp" alt="Boats">
<div class="text">Swanage - by Jenny Fairbrother ©</div>
<img class="imgsx" src="./trip/night.webp" alt="Night time">
<div class="text">Night time on the beach - by Stephen Williams ©</div>
<img class="imgsx" src="./trip/training.webp" alt="Training ship">
<div class="text">Training in Swanage Harbour ©</div>
<img class="imgsx" src="./trip/buffet.webp" alt="Buffet car">
<div class="text">Buffet Car, Swanage Station - Jenny Fairbrother ©</div>
<img class="imgsx" src="./trip/sunny.webp" alt="Sunny evening">
<div class="text" style="opacity:1">A Sunny evening in Swanage - by Jill Giles ©</div>
</div>
javascript
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
var current = 0,
slides = document.getElementsByClassName("imgsx");
caps = document.getElementsByClassName("text");
setInterval(function() {
for (var i = 0; i < slides.length; i++) {
slides[i].style.opacity = 0;
caps[i].style.opacity = 0;
}
current = (current != slides.length - 1) ? current + 1 : 0;
slides[current].style.opacity = 1;
caps[current].style.opacity = 1;
}, 5000);
</script>
编辑
Codepen 示例
https://codepen.io/dcsimp/pen/yLvvdwb
使用 css 个动画。
制作一个div,然后使用css 动画每5000 毫秒更改其背景图像。
你可以对文本做同样的事情。会快很多。
按照@Yaver Javid的选项,可以使用css动画
但我找到了你从最后一张图片开始的原因
把所有带opacity: 1
和position: abusolute
的图片放在外层元素的同一个位置,就像把纸放在table上一样,最后一张会显示and其他人会躲在它旁边。
解决办法是一开始就把所有的图片都设置成opacity: 0
,但是因为你用了setTimeout
功能,页面加载时第一张图片会在5秒后出现,你可以设置第一张图文带opacity: 1
我的编辑是here
我正在尝试创建一个小型幻灯片。幻灯片由六张图片组成,每张图片都有自己的标题。还有一个静态的通用标题。
下面的代码有效,但它首先显示最后一张图片,然后跳过第一张图片并循环访问其余图片。第一轮结束后一切正常,请问为什么会这样?
CSS
.imwrap {
max-width: 500px;
margin: 0 auto;
position: relative;
font-family: Roboto;
}
.imgsx {
position: absolute;
transition: opacity 1.5s ease-in;
max-width: 99%;
border-radius: 13px;
}
.text {
color: white;
font-weight: bolder;
font-size: 15px;
padding: 8px 12px;
position: absolute;
margin-top: 65%;
left: 50%;
transform: translate(-50%);
text-align: center;
transition: opacity 1.5s ease-in;
width: fit-content;
z-index: 2000;
opacity: 0;
display: block;
text-align: center;
}
.numbertext {
color: blue;
font-size: 12px;
padding: 8px 12px;
position: absolute;
top: 0;
background-color: rgba(255, 255, 255, 0.6);
border-top-right-radius: 8px;
border-bottom-right-radius: 8px;
z-index: 100;
}
.imgsx+.imgsx {
opacity: 0;
}
HTML
<div class="imwrap">
<div class="numbertext">with kind permission from picturesofengland.com</div>
<img class="imgsx" src="./trip/railway.webp" alt="Railway">
<div class="text">Swanage preserved railway - by Jack Rickard ©</div>
<img class="imgsx" src="./trip/boats.webp" alt="Boats">
<div class="text">Swanage - by Jenny Fairbrother ©</div>
<img class="imgsx" src="./trip/night.webp" alt="Night time">
<div class="text">Night time on the beach - by Stephen Williams ©</div>
<img class="imgsx" src="./trip/training.webp" alt="Training ship">
<div class="text">Training in Swanage Harbour ©</div>
<img class="imgsx" src="./trip/buffet.webp" alt="Buffet car">
<div class="text">Buffet Car, Swanage Station - Jenny Fairbrother ©</div>
<img class="imgsx" src="./trip/sunny.webp" alt="Sunny evening">
<div class="text" style="opacity:1">A Sunny evening in Swanage - by Jill Giles ©</div>
</div>
javascript
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
var current = 0,
slides = document.getElementsByClassName("imgsx");
caps = document.getElementsByClassName("text");
setInterval(function() {
for (var i = 0; i < slides.length; i++) {
slides[i].style.opacity = 0;
caps[i].style.opacity = 0;
}
current = (current != slides.length - 1) ? current + 1 : 0;
slides[current].style.opacity = 1;
caps[current].style.opacity = 1;
}, 5000);
</script>
编辑
Codepen 示例 https://codepen.io/dcsimp/pen/yLvvdwb
使用 css 个动画。
制作一个div,然后使用css 动画每5000 毫秒更改其背景图像。 你可以对文本做同样的事情。会快很多。
按照@Yaver Javid的选项,可以使用css动画
但我找到了你从最后一张图片开始的原因
把所有带opacity: 1
和position: abusolute
的图片放在外层元素的同一个位置,就像把纸放在table上一样,最后一张会显示and其他人会躲在它旁边。
解决办法是一开始就把所有的图片都设置成opacity: 0
,但是因为你用了setTimeout
功能,页面加载时第一张图片会在5秒后出现,你可以设置第一张图文带opacity: 1
我的编辑是here