You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于导航栏激活链接切换对应Swiper图片轮播?

实现导航切换对应Swiper轮播的方案

问题描述

我已经用CSS和JS实现了三个可激活的导航链接,手里有三组图片数据集,想要点击激活导航后,在链接下方以Swiper轮播的形式展示对应图片,参考New Balance网站的激活轮播效果,该怎么实现?


完整实现步骤

1. 引入Swiper资源

首先需要引入Swiper的CSS和JS文件:

<!-- Swiper CSS -->
<link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css" />
<!-- Swiper JS -->
<script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>

2. 修改HTML结构

  • 给每个导航按钮添加data-slide属性,关联对应的轮播容器ID
  • 将每个slide-container替换为Swiper标准结构,放入对应图片:
<div class="active-link" id="active-link">
  <li>
    <a class="button" data-slide="slide-container-1">Him</a>
  </li>
  <li>
    <a class="button active" data-slide="slide-container-2">2</a>
  </li>
  <li>
    <a class="button" data-slide="slide-container-3">Her</a>
  </li>
</div>
<div class="slide-containers">
  <!-- 第一组轮播 -->
  <div id="slide-container-1" class="slide-container swiper-container">
    <div class="swiper-wrapper">
      <div class="swiper-slide"><img src="him-img-1.jpg" alt="Him系列图片1"></div>
      <div class="swiper-slide"><img src="him-img-2.jpg" alt="Him系列图片2"></div>
      <div class="swiper-slide"><img src="him-img-3.jpg" alt="Him系列图片3"></div>
    </div>
    <div class="swiper-pagination"></div>
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
  </div>

  <!-- 第二组轮播 -->
  <div id="slide-container-2" class="slide-container swiper-container active">
    <div class="swiper-wrapper">
      <div class="swiper-slide"><img src="series-2-img-1.jpg" alt="系列2图片1"></div>
      <div class="swiper-slide"><img src="series-2-img-2.jpg" alt="系列2图片2"></div>
      <div class="swiper-slide"><img src="series-2-img-3.jpg" alt="系列2图片3"></div>
    </div>
    <div class="swiper-pagination"></div>
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
  </div>

  <!-- 第三组轮播 -->
  <div id="slide-container-3" class="slide-container swiper-container">
    <div class="swiper-wrapper">
      <div class="swiper-slide"><img src="her-img-1.jpg" alt="Her系列图片1"></div>
      <div class="swiper-slide"><img src="her-img-2.jpg" alt="Her系列图片2"></div>
      <div class="swiper-slide"><img src="her-img-3.jpg" alt="Her系列图片3"></div>
    </div>
    <div class="swiper-pagination"></div>
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
  </div>
</div>

3. 调整CSS样式

  • 移除原slide-container的display: none,改用opacity和visibility实现平滑切换
  • 适配Swiper容器的布局:
.active-link {
  position: relative;
  display: flex;
  top: 12rem;
  justify-content: center;
  gap: 2rem;
  list-style: none;
  padding: 0;
}

.button {
  padding: 0 40px 10px 40px;
  cursor: pointer;
  display: inline-block;
  font-weight: 500;
  border-bottom: 2px solid black;
  transition: all 0.3s ease;
}

.button.active {
  color: red;
  border-bottom: 5px solid red;
  padding-bottom: 7px;
}

.slide-containers {
  position: relative;
  top: 14rem;
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
}

.slide-container {
  position: absolute;
  width: 100%;
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.5s ease, visibility 0.5s ease;
}

.slide-container.active {
  opacity: 1;
  visibility: visible;
  position: static;
}

/* Swiper基础样式调整 */
.swiper-slide img {
  width: 100%;
  height: auto;
  object-fit: cover;
}

.swiper-pagination {
  bottom: 10px;
}

.swiper-button-prev, .swiper-button-next {
  color: red;
}

4. 修改JavaScript逻辑

  • 初始化所有Swiper实例
  • 点击导航时切换对应轮播的显示状态,同时重置其他轮播:
// 初始化所有Swiper实例
const swiperInstances = [];
document.querySelectorAll('.swiper-container').forEach((container, index) => {
  swiperInstances.push(new Swiper(container, {
    loop: true,
    pagination: {
      el: '.swiper-pagination',
      clickable: true,
    },
    navigation: {
      nextEl: '.swiper-button-next',
      prevEl: '.swiper-button-prev',
    },
  }));
});

// 导航切换逻辑
const btnContainer = document.getElementById("active-link");
const btns = btnContainer.getElementsByClassName("button");

// 移除指定元素的类
function removeClass(selector, className) {
  document.querySelectorAll(selector).forEach(el => el.classList.remove(className));
}

// 重置所有轮播容器状态
const resetSlideContainers = () => {
  document.querySelectorAll('.slide-container').forEach(slide => {
    slide.classList.remove('active');
  });
}

// 给每个导航按钮绑定点击事件
for (let i = 0; i < btns.length; i++) {
  btns[i].addEventListener('click', function(e) {
    e.preventDefault();
    // 切换导航激活状态
    removeClass('.button', 'active');
    this.classList.add('active');
    // 切换轮播显示
    resetSlideContainers();
    const targetSlideId = this.getAttribute('data-slide');
    document.getElementById(targetSlideId).classList.add('active');
  });
}

关键说明

  1. 平滑过渡效果:用opacity和visibility替代display: none,配合CSS过渡实现切换时的淡入淡出,更贴近New Balance的效果
  2. Swiper实例管理:提前初始化所有轮播实例,避免切换时重复初始化导致的性能问题
  3. 导航与轮播的关联:通过data-slide属性建立导航按钮和轮播容器的对应关系,逻辑更清晰
  4. 样式统一:给导航按钮添加过渡动画,让激活状态切换更流畅

内容的提问来源于stack exchange,提问作者user15442201

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 07:01:01