幻灯片是网页中常见的展示组件,默认的硬切换效果会显得比较突兀,添加滑动效果能让交互更顺滑。下面我们就用原生技术实现一个带滑动效果的幻灯片。

实现原理
滑动效果的核心是通过CSS控制幻灯片容器的水平偏移,配合过渡动画实现平滑移动。整体结构分为三部分:
- HTML结构:用外层容器限制显示区域,内层容器存放所有幻灯片项,水平排列
- CSS样式:设置容器尺寸、隐藏溢出内容,定义滑动过渡的动画属性
- JavaScript逻辑:监听切换按钮点击,计算需要偏移的距离,更新内层容器的位置
完整实现代码
HTML结构
<div class="slide-container">
<div class="slide-wrapper">
<div class="slide-item">幻灯片1</div>
<div class="slide-item">幻灯片2</div>
<div class="slide-item">幻灯片3</div>
<div class="slide-item">幻灯片4</div>
</div>
<button class="prev-btn">上一张</button>
<button class="next-btn">下一张</button>
</div>CSS样式
.slide-container {
width: 800px;
height: 400px;
margin: 0 auto;
position: relative;
overflow: hidden; /* 隐藏超出容器的内容 */
border: 1px solid #eee;
}
.slide-wrapper {
display: flex;
width: 3200px; /* 4张幻灯片 * 800px宽度 */
height: 100%;
transition: transform 0.5s ease-in-out; /* 滑动过渡效果 */
}
.slide-item {
width: 800px;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 32px;
color: #fff;
}
.slide-item:nth-child(1) { background-color: #409eff; }
.slide-item:nth-child(2) { background-color: #67c23a; }
.slide-item:nth-child(3) { background-color: #e6a23c; }
.slide-item:nth-child(4) { background-color: #f56c6c; }
.prev-btn, .next-btn {
position: absolute;
top: 50%;
transform: translateY(-50%);
padding: 10px 20px;
background-color: rgba(0,0,0,0.5);
color: #fff;
border: none;
cursor: pointer;
z-index: 10;
}
.prev-btn { left: 10px; }
.next-btn { right: 10px; }JavaScript逻辑
// 获取DOM元素
const slideWrapper = document.querySelector('.slide-wrapper');
const prevBtn = document.querySelector('.prev-btn');
const nextBtn = document.querySelector('.next-btn');
const slideItems = document.querySelectorAll('.slide-item');
const slideWidth = 800; // 单张幻灯片宽度
let currentIndex = 0; // 当前显示的幻灯片索引
const totalSlides = slideItems.length;
// 更新幻灯片位置
function updateSlidePosition() {
// 计算偏移量,负数表示向左移动
const offset = -currentIndex * slideWidth;
slideWrapper.style.transform = `translateX(${offset}px)`;
}
// 上一张按钮点击事件
prevBtn.addEventListener('click', () => {
currentIndex = (currentIndex - 1 + totalSlides) % totalSlides;
updateSlidePosition();
});
// 下一张按钮点击事件
nextBtn.addEventListener('click', () => {
currentIndex = (currentIndex + 1) % totalSlides;
updateSlidePosition();
});关键点说明
这里有几个需要注意的细节:
slide-wrapper的宽度需要是所有幻灯片宽度的总和,保证所有项能水平排列- CSS中的
transition属性定义了transform的变化过渡时间为0.5秒,缓动函数为ease-in-out,让滑动效果更自然 - JavaScript中计算索引时用取模运算,保证索引在0到
totalSlides-1之间循环,不会出现越界 - 如果需要支持滑动手势,可以额外监听
touchstart、touchmove、touchend事件,根据滑动距离判断是否切换幻灯片
扩展优化
基础滑动效果实现后,还可以做这些优化:
- 添加自动轮播功能,每隔几秒自动切换到下一张
- 增加底部指示器,显示当前幻灯片位置,点击指示器可以直接跳转到对应幻灯片
- 添加滑动边界判断,避免滑动到不存在的幻灯片
- 优化移动端体验,适配触摸滑动操作
JavaScriptHTMLCSS_animationslide_effect修改时间:2026-05-26 23:39:15