<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bootstrap 图片滑块插件</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome 图标 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Arial', sans-serif;
background-color: #f8f9fa;
padding: 50px 0;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
.slider-section {
margin-bottom: 50px;
}
.slider-title {
text-align: center;
margin-bottom: 30px;
color: #333;
font-weight: bold;
}
.carousel {
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
border-radius: 15px;
overflow: hidden;
}
.carousel-inner {
border-radius: 15px;
}
.carousel-item img {
height: 500px;
object-fit: cover;
width: 100%;
}
.carousel-control-prev,
.carousel-control-next {
width: 5%;
background-color: rgba(0, 0, 0, 0.3);
border-radius: 50%;
width: 50px;
height: 50px;
top: 50%;
transform: translateY(-50%);
margin: 0 20px;
opacity: 1;
transition: all 0.3s ease;
}
.carousel-control-prev:hover,
.carousel-control-next:hover {
background-color: rgba(0, 0, 0, 0.5);
}
.carousel-control-prev-icon,
.carousel-control-next-icon {
width: 30px;
height: 30px;
}
.carousel-indicators {
bottom: 20px;
}
.carousel-indicators button {
width: 12px;
height: 12px;
border-radius: 50%;
margin: 0 5px;
border: none;
background-color: rgba(255, 255, 255, 0.5);
}
.carousel-indicators button.active {
background-color: white;
}
.thumbnail-container {
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 10px;
margin-top: 20px;
}
.thumbnail {
width: 80px;
height: 60px;
cursor: pointer;
border: 2px solid transparent;
border-radius: 5px;
transition: all 0.3s ease;
overflow: hidden;
}
.thumbnail img {
width: 100%;
height: 100%;
object-fit: cover;
}
.thumbnail:hover,
.thumbnail.active {
border-color: #007bff;
transform: scale(1.05);
}
.website-link {
display: block;
text-align: center;
margin-top: 50px;
padding: 15px 30px;
background: linear-gradient(to right, #FF416C, #FF4B2B);
color: white;
text-decoration: none;
border-radius: 30px;
font-weight: bold;
width: fit-content;
margin-left: auto;
margin-right: auto;
transition: all 0.3s ease;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
}
.website-link:hover {
transform: translateY(-5px);
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
color: white;
}
@media (max-width: 768px) {
.carousel-item img {
height: 300px;
}
.carousel-control-prev,
.carousel-control-next {
width: 40px;
height: 40px;
}
.thumbnail {
width: 60px;
height: 45px;
}
}
</style>
</head>
<body>
<div class="container">
<div class="slider-section">
<h2 class="slider-title">精美图片滑动展示</h2>
<!-- Bootstrap 轮播组件 -->
<div id="imageSlider" class="carousel slide" data-bs-ride="carousel">
<!-- 指示器 -->
<div class="carousel-indicators">
<button type="button" data-bs-target="#imageSlider" data-bs-slide-to="0" class="active"></button>
<button type="button" data-bs-target="#imageSlider" data-bs-slide-to="1"></button>
<button type="button" data-bs-target="#imageSlider" data-bs-slide-to="2"></button>
<button type="button" data-bs-target="#imageSlider" data-bs-slide-to="3"></button>
<button type="button" data-bs-target="#imageSlider" data-bs-slide-to="4"></button>
</div>
<!-- 轮播项目 -->
<div class="carousel-inner">
<div class="carousel-item active">
<img src="https://source.unsplash.com/random/1200x600/?nature,1" class="d-block w-100" alt="自然风光1">
</div>
<div class="carousel-item">
<img src="https://source.unsplash.com/random/1200x600/?nature,2" class="d-block w-100" alt="自然风光2">
</div>
<div class="carousel-item">
<img src="https://source.unsplash.com/random/1200x600/?nature,3" class="d-block w-100" alt="自然风光3">
</div>
<div class="carousel-item">
<img src="https://source.unsplash.com/random/1200x600/?nature,4" class="d-block w-100" alt="自然风光4">
</div>
<div class="carousel-item">
<img src="https://source.unsplash.com/random/1200x600/?nature,5" class="d-block w-100" alt="自然风光5">
</div>
</div>
<!-- 左右控制按钮 -->
<button class="carousel-control-prev" type="button" data-bs-target="#imageSlider" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">上一张</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#imageSlider" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">下一张</span>
</button>
</div>
<!-- 缩略图导航 -->
<div class="thumbnail-container">
<div class="thumbnail active" data-bs-target="#imageSlider" data-bs-slide-to="0">
<img src="https://source.unsplash.com/random/300x200/?nature,1" alt="缩略图1">
</div>
<div class="thumbnail" data-bs-target="#imageSlider" data-bs-slide-to="1">
<img src="https://source.unsplash.com/random/300x200/?nature,2" alt="缩略图2">
</div>
<div class="thumbnail" data-bs-target="#imageSlider" data-bs-slide-to="2">
<img src="https://source.unsplash.com/random/300x200/?nature,3" alt="缩略图3">
</div>
<div class="thumbnail" data-bs-target="#imageSlider" data-bs-slide-to="3">
<img src="https://source.unsplash.com/random/300x200/?nature,4" alt="缩略图4">
</div>
<div class="thumbnail" data-bs-target="#imageSlider" data-bs-slide-to="4">
<img src="https://source.unsplash.com/random/300x200/?nature,5" alt="缩略图5">
</div>
</div>
</div>
</div>
<!-- Bootstrap JS 和 Popper.js -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
<script>
// 自定义缩略图点击效果
document.addEventListener('DOMContentLoaded', function() {
const thumbnails = document.querySelectorAll('.thumbnail');
const carousel = document.getElementById('imageSlider');
thumbnails.forEach(thumbnail => {
thumbnail.addEventListener('click', function() {
// 移除所有缩略图的active类
thumbnails.forEach(t => t.classList.remove('active'));
// 为当前点击的缩略图添加active类
this.classList.add('active');
// 获取data-bs-slide-to值
const slideTo = this.getAttribute('data-bs-slide-to');
// 使用Bootstrap的carousel方法切换到对应幻灯片
const bsCarousel = new bootstrap.Carousel(carousel);
bsCarousel.to(slideTo);
});
});
// 监听轮播滑动事件,更新缩略图状态
carousel.addEventListener('slid.bs.carousel', function(event) {
const activeIndex = event.to;
// 更新缩略图active状态
thumbnails.forEach((thumbnail, index) => {
if (index === activeIndex) {
thumbnail.classList.add('active');
} else {
thumbnail.classList.remove('active');
}
});
});
});
</script>
</body>
</html>
Bootstrap 图片滑块插件
于 2025-04-24 16:22:36 首次发布