如何在单个HTML页面中使用不同样式的多个Swiper JS组件
解决同一页面两个Swiper组件无法同时工作的问题
问题根源
- 第二个Swiper的幻灯片用了自定义的
swiper-slide1类,Swiper只能识别默认的swiper-slide类,导致无法初始化幻灯片。 - JS里重复用
var swiper变量,会覆盖第一个实例的引用,虽不直接导致失效,但不利于后续维护。 - 第二个Swiper容器的CSS选择器错误(
.swiper1),无法正确应用样式。
修正步骤
- 改幻灯片类名:把第二个Swiper里的所有
swiper-slide1换成swiper-slide,要加自定义样式的话,在这个类基础上额外加类(比如custom-slide)。 - 区分JS实例变量:把第二个Swiper的变量名改成
swiper2,避免变量覆盖。 - 修正CSS选择器:用
.mySwiper1作为第二个Swiper容器的选择器,替换无效的.swiper1。 - 统一分页器类名(可选):把第二个分页器的类名改成
swiper-pagination swiper-pagination-2,既保持Swiper规范,又方便自定义样式。
修正后的JS代码
var swiper = new Swiper(".mySwiper", { effect: "flip", grabCursor: true, pagination: { el: ".swiper-pagination", }, navigation: { nextEl: ".swiper-button-next", prevEl: ".swiper-button-prev", }, }); // 第二个Swiper实例,用不同变量名 var swiper2 = new Swiper(".mySwiper1", { slidesPerView: 3, spaceBetween: 30, freeMode: true, pagination: { el: ".swiper-pagination-2", clickable: true, }, });
修正后的CSS代码
.swiper { width: 50%; height: 50em; padding: 50px; } .swiper-slide { background-position: center; background-size: cover; width: 300px; height: 300px; } .swiper-slide img { display: block; width: 100%; border-radius: 10em; } .swiper-pagination { top: 42em; } /* 第二个Swiper容器样式,用正确选择器 */ .mySwiper1 { width: 100%; height: 100%; margin-top: 50px; /* 可选,加间距区分两个组件 */ } /* 第二个Swiper的幻灯片样式,基于默认类加自定义样式 */ .mySwiper1 .swiper-slide { text-align: center; font-size: 18px; background: #fff; /* 垂直居中文字 */ display: -webkit-box; display: -ms-flexbox; display: -webkit-flex; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; } .mySwiper1 .swiper-slide .img1 { display: block; width: 100%; height: 100%; object-fit: cover; }
修正后的HTML代码
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css" /> <header class="nav"> <ul class="nav_"> <li><a href="">Home</a></li> <li><a href="">services</a></li> <li><a href="">Contact us</a></li> </ul> </header> <div class="curve"> </div> <section> <img id="img_header" src="/img/Header_2.png" alt=""> </section> <div class="section_title"> <h3 id="section_products">Products</h3> </div> <div class="swiper mySwiper"> <div class="swiper-wrapper"> <div class="swiper-slide"> <a href=""> <img src="https://swiperjs.com/demos/images/nature-1.jpg" /></a> </div> <div class="swiper-slide"> <img src="https://swiperjs.com/demos/images/nature-2.jpg" /> <h1 id="section_Name">مختار</h1> </div> <div class="swiper-slide"> <img src="https://swiperjs.com/demos/images/nature-3.jpg" /> </div> <div class="swiper-slide"> <img src="https://swiperjs.com/demos/images/nature-4.jpg" /> </div> <div class="swiper-slide"> <img src="https://swiperjs.com/demos/images/nature-5.jpg" /> </div> <div class="swiper-slide"> <img src="https://swiperjs.com/demos/images/nature-6.jpg" /> </div> <div class="swiper-slide"> <img src="https://swiperjs.com/demos/images/nature-6.jpg" /> </div> <div class="swiper-slide"> <img src="https://swiperjs.com/demos/images/nature-5.jpg" /> </div> </div> <div class="swiper-button-next"></div> <div class="swiper-button-prev"></div> <div class="swiper-pagination"></div> </div> <!-- 修正后的第二个Swiper --> <div class="swiper mySwiper1"> <div class="swiper-wrapper"> <div class="swiper-slide">Slide 1</div> <div class="swiper-slide">Slide 2</div> <div class="swiper-slide">Slide 3</div> <div class="swiper-slide">Slide 4</div> <div class="swiper-slide">Slide 5</div> <div class="swiper-slide">Slide 6</div> <div class="swiper-slide">Slide 7</div> <div class="swiper-slide">Slide 8</div> <div class="swiper-slide">Slide 9</div> </div> <div class="swiper-pagination swiper-pagination-2"></div> </div> <script src="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js"></script>
内容的提问来源于stack exchange,提问作者ibrahim mohamed
相关产品推荐
相关产品推荐

