我给你最简单、最稳定、直接复制就能用的 CSS3 自动轮播幻灯片 实现方法,分 2 种最常用方案:
完全靠 CSS3 @keyframes 自动播放,不用写一行 JavaScript。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>纯CSS自动轮播</title>
<style>
/* 轮播容器 */
.slider {
width: 100%;
max-width: 800px;
height: 400px;
margin: 0 auto;
overflow: hidden; /* 隐藏外面的图片 */
position: relative;
}
/* 图片包裹层:开启动画 */
.slides {
width: 300%; /* 3张图就是300% */
height: 100%;
display: flex;
/* 核心:自动轮播动画 */
animation: slide 9s infinite linear;
}
/* 单张图片 */
.slide {
width: 100%;
height: 100%;
}
.slide img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* 动画关键帧:自动滑动 */
@keyframes slide {
0% { transform: translateX(0); } /* 第1张 */
33% { transform: translateX(0); } /* 停留 */
34% { transform: translateX(-100%); } /* 切第2张 */
66% { transform: translateX(-100%); } /* 停留 */
67% { transform: translateX(-200%); } /* 切第3张 */
99% { transform: translateX(-200%); } /* 停留 */
100%{ transform: translateX(0); } /* 回到第1张 */
}
</style>
</head>
<body>
<div class="slider">
<div class="slides">
<div class="slide"><img src="https://picsum.photos/id/237/800/400"></div>
<div class="slide"><img src="https://picsum.photos/id/238/800/400"></div>
<div class="slide"><img src="https://picsum.photos/id/239/800/400"></div>
</div>
</div>
</body>
</html>overflow: hidden 隐藏容器外的图片display: flex 让图片排成一横排@keyframes 定义滑动位置animation: slide 9s infinite 让动画无限自动播放能暂停、自动播放、无缝切换,企业项目都用这个。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS+CSS自动轮播</title>
<style>
.slider {
width: 100%;
max-width: 800px;
height: 400px;
margin: 20px auto;
overflow: hidden;
position: relative;
}
.slides {
height: 100%;
display: flex;
transition: 0.6s; /* 滑动平滑 */
}
.slide {
width: 100%;
height: 100%;
}
.slide img {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
</head>
<body>
<div class="slider">
<div class="slides">
<div class="slide"><img src="https://picsum.photos/id/237/800/400"></div>
<div class="slide"><img src="https://picsum.photos/id/238/800/400"></div>
<div class="slide"><img src="https://picsum.photos/id/239/800/400"></div>
</div>
</div>
<script>
const slides = document.querySelector('.slides');
let index = 0;
// 自动轮播函数
function autoPlay() {
index++;
// 切换到下一张
slides.style.transform = `translateX(-${index * 100}%)`;
// 到最后一张,跳回第一张
if (index >= 3) {
setTimeout(() => {
slides.style.transition = 'none'; // 关闭动画
index = 0;
slides.style.transform = `translateX(0)`;
// 重新开启动画
setTimeout(() => slides.style.transition = '0.6s', 20)
}, 600);
}
}
// 每 3 秒切换一次
setInterval(autoPlay, 3000);
</script>
</body>
</html>9s(总时长)3000(3000毫秒=3秒)400%transition: 0.6soverflow: hiddendisplay: flex@keyframes + animationsetInterval 定时切换原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。