一、基础概念
<div>
元素。<img>
标签。transition
属性)或者动画(@keyframes
规则)来创建平滑的切换效果。display
属性或者opacity
属性)来实现轮换效果。二、相关优势
三、类型
四、应用场景
五、示例代码(淡入淡出型图片轮换特效)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF - 8">
<meta name="viewport" content="width=device-width, initial - scale = 1.0">
<title>图片轮换特效</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="image - container">
<img src="image1.jpg" alt="Image 1" class="slide">
<img src="image2.jpg" alt="Image 2" class="slide">
<img src="image3.jpg" alt="Image 3" class="slide">
</div>
<script src="script.js"></script>
</body>
</html>
.image - container {
position: relative;
width: 800px;
height: 600px;
overflow: hidden;
}
.slide {
position: absolute;
width: 100%;
height: 100%;
opacity: 0;
transition: opacity 1s ease - in - out;
}
.slide:first - child {
opacity: 1;
}
const slides = document.querySelectorAll('.slide');
let currentSlide = 0;
const totalSlides = slides.length;
function showNextSlide() {
slides[currentSlide].style.opacity = 0;
currentSlide = (currentSlide + 1) % totalSlides;
slides[currentSlide].style.opacity = 1;
}
setInterval(showNextSlide, 3000);
在这个示例中:
setInterval
每隔3秒调用showNextSlide
函数,该函数改变当前图片的透明度为0,计算下一个要显示的图片索引并设置其透明度为1,从而实现淡入淡出的图片轮换效果。六、可能遇到的问题及解决方法
<img>
标签添加onload
事件监听器,当所有图片都加载完成后再启动setInterval
。const slides = document.querySelectorAll('.slide');
let currentSlide = 0;
const totalSlides = slides.length;
let loadedImages = 0;
slides.forEach((slide) => {
slide.onload = () => {
loadedImages++;
if (loadedImages === totalSlides) {
setInterval(showNextSlide, 3000);
}
};
// 如果图片已经加载完成(缓存等情况),直接增加计数
if (slide.complete) {
loadedImages++;
}
});
function showNextSlide() {
slides[currentSlide].style.opacity = 0;
currentSlide = (currentSlide + 1) % totalSlides;
slides[currentSlide].style.opacity = 1;
}
-webkit -
等)来兼容不同浏览器。对于JavaScript,可以使用一些兼容性库(如polyfill
)或者检测浏览器特性并提供替代方案。例如,在使用transition
属性时,可以添加-webkit - transition
等前缀。.slide {
position: absolute;
width: 100%;
height: 100%;
opacity: 0;
-webkit - transition: opacity 1s ease - in - out;
transition: opacity 1s ease - in - out;
}
领取专属 10元无门槛券
手把手带您无忧上云