【vue+Swiper】vue中使用swiper缩略图,展示一张大图及n张小图,点击小图切换不同的大图展示,完整代码

本文介绍了如何在Vue项目中使用Swiper库创建带有缩略图的轮播图组件,包括安装步骤、HTML结构、API应用以及如何通过JavaScript实现主图与缩略图的联动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果:
在这里插入图片描述
这是在swiper官网上找的示例,swiper太强大了,有非常多不同的示例,有api,有教程,还可以下载示例代码。

但是第一次使用,研究这个缩略图的实现还是花了几个小时,好在实现了。

swiper官网请戳这里

安装

 npm i swiper

将swiper封装成组件可以复用,在components公共组件文件夹中新增swiper文件夹,新增index.vue
在这里插入图片描述选择API文档,Thumbs(缩略图),可以查看缩略图的使用示例在这里插入图片描述
ps:这里要补充下,示例其实挺清楚的,但是因为没有对应的html参考,所以我在这里多花了一点时间。swiper缩略图的实现其实是new Swiper了两个swiper实例,然后通过给主图所在的swiper实例的thumbs对象配置缩略图所在的swiper进行关联。
在这里插入图片描述

如果想看完整的示例代码,需要下载它的示例,我下载的是第一个
在这里插入图片描述

注意点:

1、加载插件,需要用到的文件有swiper-bundle.min.js和swiper-bundle.min.css文件
在public文件夹的index.html中引入

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

2、添加HTML内容。Swiper7的默认容器是’.swiper’,Swiper6之前是’.swiper-container’,我这里是’swiper‘,可以再加类名,但是默认类名一定是’swiper‘。
3、初始化Swiper var swiper = new Swiper(“#mySwiper”, {})
4、主图与缩略图关联,将点击缩略图的activeIndex传给主图的slideTo方法中

完整代码:
componeents/swiper/index

<template>
  <div class="container-box">
    <!-- 主图 -->
    <div class="swiper mySwiper2" id="mySwiper2">
      <div class="swiper-wrapper">
        <div
          class="swiper-slide"
          ref="mySwiper2"
          v-for="(item, index) in imgArr"
          :key="item.id"
        >
          <img :src="item.imgSrc" alt="" />
        </div>
      </div>
    </div>
    <!-- 缩略图 -->
    <div class="swiper mySwiper" id="mySwiper" ref="mySwiper">
      <div class="swiper-wrapper">
        <div
          class="swiper-slide"
          v-for="(item, index) in imgArr"
          :key="item.id"
        >
          <img :src="item.imgSrc" alt="" />
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import Swiper from "swiper";
import "swiper/css";

export default {
  name: "SwiperDemo",
  props: {
    imgArr: {
      type: Array,
      default: () => {
        return [];
      },
    },
  },
  data() {
    return {
    };
  },
  mounted() {
    this.init();
  },
  methods: {
    init() {
      //缩略图
      var swiper = new Swiper("#mySwiper", {
        spaceBetween: 10,
        slidesPerView: 4,
        watchSlidesProgress: true,
        on: {
          click: () => {
            // 缩略图实例
            let swiperThumbs = swiper;
            // 主图实例
            let swiperTop = swiper2;
            let activeIndex = swiperThumbs.clickedIndex;
            swiperTop.slideTo(activeIndex, 1000, false);
    
          },
        },
      });
      //   主图
      var swiper2 = new Swiper("#mySwiper2", {
        spaceBetween: 10,
        thumbs: {
          swiper: swiper,
        },
        slideThumbActiveClass: "my-slide-thumb-active",
        multipleActiveThumbs: true,
      });
    },
  },
};
</script>

<style lang="scss">
.container-box {
  height: 584px;
  width: 584px;
}
.swiper {
  width: 100%;
  height: 100%;
}

.swiper-slide {
  text-align: center;
  font-size: 18px;
  background: #fff;
  display: flex;
  justify-content: center;
  align-items: center;
}

.swiper-slide img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.swiper {
  width: 100%;
  height: 143px;
  margin-left: auto;
  margin-right: auto;
}

.swiper-slide {
  background-size: cover;
  background-position: center;
}

.mySwiper2 {
  height: 80%;
  width: 100%;
}

.mySwiper {
  height: 20%;
  box-sizing: border-box;
  padding: 10px 0;
}

.mySwiper .swiper-slide {
  width: 25%;
  height: 100%;
  opacity: 0.4;
}

.mySwiper .swiper-slide-thumb-active {
  opacity: 1;
}

.swiper-slide img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
</style>

在页面中使用

//将图片数组传进去就行
<swiper :imgArr="imgArr"></swiper>

import swiper from "@/components/swiper";
 components: { swiper },


### 使用 `vue-awesome-swiper` 实现小切换大图功能 为了实现在 Vue 项目中通过点击缩略图切换展示大图效果,可以利用 `vue-awesome-swiper` 提供的特性。下面是一个详细的实现方案。 #### 安装依赖库 对于 Vue2 的环境推荐安装特定版本以确保兼容性和稳定性: ```bash npm install swiper@5.0 vue-awesome-swiper -S ``` 注意不同版本之间的样式文件导入路径有所区别,在此案例中使用的是 Swiper 5 版本[^3]。 #### 导入必要的模块和样式 在项目的入口文件 `main.js` 中完成如下操作: ```javascript import Vue from 'vue' // 引入组件库及其对应的CSS资源 import VueAwesomeSwiper from 'vue-awesome-swiper' import 'swiper/css/swiper.css' Vue.use(VueAwesomeSwiper) ``` #### 创建片预览组件 创建一个新的 Vue 组件用于承载相册布局逻辑以及交互行为: ```html <template> <div class="gallery"> <!-- 大图区域 --> <swiper :options="swiperOptionTop" ref="bigImageSwiper"> <swiper-slide v-for="(slide, index) in slides" :key="index"> <img :src="slide.src"/> </swiper-slide> <!-- Add Pagination --> <div class="swiper-pagination swiper-pagination-white"></div> <!-- Add Navigation Arrows --> <div class="swiper-button-next swiper-button-white"></div> <div class="swiper-button-prev swiper-button-white"></div> </swiper> <!-- 缩略图导航栏 --> <swiper :options="swiperOptionThumbs" ref="thumbsSwiper"> <swiper-slide v-for="(thumb, index) in thumbs" :key="index"> <img @click="changeBigImg(index)" :src="thumb.src"/> </swiper-slide> </swiper> </div> </template> <script> export default { data() { return { // 配置顶部大图轮播器选项 swiperOptionTop: { spaceBetween: 10, navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev' }, pagination: { el: '.swiper-pagination', type: 'fraction' } }, // 配置底部缩略图轮播器选项 swiperOptionThumbs: { spaceBetween: 10, centeredSlides: true, slidesPerView: 'auto', touchRatio: 0.2, slideToClickedSlide: true }, // 片数据源 slides: [ { src: '/path/to/image1.jpg' }, { src: '/path/to/image2.jpg' }, ... ], // 缩略图数据源 thumbs: [ { src: '/path/to/thumb1.jpg' }, { src: '/path/to/thumb2.jpg' }, ... ] }; }, methods: { changeBigImg(index){ this.$refs.bigImageSwiper.swiper.slideTo(index); } } } </script> ``` 上述代码片段展示了如何构建一个包含两个 Swiper 实例的应用场景——一个是用来显示全尺寸像的主要滑动容器;另一个则是作为辅助工具条的小型缩略图列表。当用户点击某个缩略图时会触发相应的方法改变当前正在查看的大图索引位置[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值