nuxt 使用swiper,缩略图轮播与主轮播相互关联

5 篇文章 0 订阅

nuxt 使用swiper,缩略图轮播与主轮播相互关联

概述

nuxt 使用swiper,需要缩略图轮播与主轮播相互关联

效果图

nuxt 使用swiper,缩略图轮播与主轮播相互关联

核心配置

swiper版本

在这里插入图片描述

plugins下新建swiper.js,在nuxt.config.js的plugins数组内进行引用

// swiper.js

import Vue from 'vue'
import css from 'swiper/dist/css/swiper.css'
import VueAwesomeSwiper from 'vue-awesome-swiper'
export default () => {
    Vue.use(VueAwesomeSwiper, { css })
}
{
	src: "~/plugins/swiper",
	ssr: false
	},

参考api

完整代码

<!-- 展会精彩瞬间 -->
<template>
  <div>
    <div class="second wCenter">
      <!-- 缩略图 -->
      <div class="photoDetailPar" style="margin: 0 10%">
        <div class="swiper-container photoDetail-thumbs">
          <ul class="swiper-wrapper">
            <li class="swiper-slide" v-for="(bean, idx) in list" :key="idx">
              <img :src="bean.thumImage" width="100%" />
            </li>
          </ul>
        </div>
      </div>
      <br />
      <!-- 大图 -->
      <div class="photoDetailPar">
        <div class="swiper-container photoDetail" ref="photoDetail">
          <ul class="swiper-wrapper">
            <li class="swiper-slide" v-for="(bean, idx) in list" :key="idx">
              <img :src="bean.thumImage" width="100%" />
            </li>
          </ul>
        </div>
        <!-- Add Arrows -->
        <div class="swiper-button-next"></div>
        <div class="swiper-button-prev"></div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  layout: "front",
  data() {
    return {
      list: [],
      form: {},
      photoDetailThumbs: {},
      photoDetail: {},
    };
  },
  mounted() {
    this.getListFun();
  },
  methods: {
    initSwiper() {
      // 缩略图swiper
      const sumSlide = 6;
      this.photoDetailThumbs = new Swiper(
        ".photoDetailPar .swiper-container.photoDetail-thumbs",
        {
          spaceBetween: 10,
          slidesPerView: sumSlide,
          loop: true,
          freeMode: true,
          loopedSlides: sumSlide, //looped slides should be the same
          watchSlidesProgress: true,
          watchSlidesVisibility: true,
          observeParents: true,
          // slideToClickedSlide:true,
          onTap: (swiper) => {
            let idx = swiper.clickedIndex;
            this.photoDetail.slideTo(idx, 1000, false); //
            this.photoDetailThumbs.slideTo(idx, 1000, false); //
          },
        }
      );
      //   主轮播图
      this.photoDetail = new Swiper(
        ".photoDetailPar .swiper-container.photoDetail",
        {
          loopedSlides: sumSlide, //looped slides should be the same
          nextButton: ".photoDetailPar .swiper-button-next",
          prevButton: ".photoDetailPar .swiper-button-prev",
          watchSlidesProgress: true,
          watchSlidesVisibility: true,
          observeParents: true,
          loop: true,
          effect: "fade",
          speed: 350,
          fadeEffect: {
            crossFade: true,
          },
        }
      );
      this.photoDetail.params.control = this.photoDetailThumbs;
      this.photoDetailThumbs.params.control = this.photoDetail;
    },
    getListFun() {
      this.list = [
        {
          thumImage:
            "https://pc-file.highset.cn/1/image/public/202105/20210524093809_x87oiuq04v.jpg",
        },
        {
          thumImage:
            "https://pc-file.highset.cn/1/image/public/202105/20210524112415_4cbpnu2mxb.jpg",
        },
        {
          thumImage:
            "https://pc-file.highset.cn/1/image/public/202105/20210524112609_h2tq0icg98.jpg",
        },
        {
          thumImage:
            "https://pc-file.highset.cn/1/image/public/202105/20210524112821_7jygg9qm74.jpg",
        },
        {
          thumImage:
            "https://pc-file.highset.cn/1/image/public/202105/20210524113008_wyrj21rq30.jpg",
        },
        {
          thumImage:
            "https://pc-file.highset.cn/1/image/public/202105/20210525143859_o85oa2wubp.jpg",
        },
        {
          thumImage:
            "https://pc-file.highset.cn/1/image/public/202105/20210525144000_scde3wp7jk.jpg",
        },
        {
          thumImage:
            "https://pc-file.highset.cn/1/image/public/202105/20210524095038_j6ft7qwbj6.jpg",
        },
        {
          thumImage:
            "https://pc-file.highset.cn/1/image/public/202105/20210524111009_ycl3si12es.jpg",
        },
        {
          thumImage:
            "https://pc-file.highset.cn/1/image/public/202009/20200928111726_5y01i68tx4.jpg",
        },
        {
          thumImage:
            "https://pc-file.highset.cn/1/image/public/202105/20210524095257_f5iaqxjufv.jpg",
        },
        {
          thumImage:
            "https://pc-file.highset.cn/1/image/public/202009/20200928111700_d2qmr9llu0.jpg",
        },
      ];
      setTimeout(() => {
        this.$nextTick(() => {
          this.initSwiper();
        });
      }, 1000);
    },
  },
};
</script>

<style lang="scss" scoped>
.photoDetail-thumbs .swiper-slide {
  opacity: 0.5;
  &-active {
    opacity: 1;
  }
}
</style>

如果看了这篇文章,对您有帮助,麻烦点个赞或者评论收藏一下,您的肯定是我不断更新的动力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以使用 `swiper` 插件中的 `thumbs` 属性来实现缩略图控制,并使用 `autoplay` 属性来实现自动播放,如下所示: ```html <template> <div class="swiper-container"> <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 class="swiper-slide">Slide 10</div> </div> <div class="swiper-pagination"></div> <div class="swiper-button-prev"></div> <div class="swiper-button-next"></div> <div class="swiper-container-thumbs"> <div class="swiper-wrapper"> <div class="swiper-slide"><img src="thumbnail1.jpg"></div> <div class="swiper-slide"><img src="thumbnail2.jpg"></div> <div class="swiper-slide"><img src="thumbnail3.jpg"></div> <div class="swiper-slide"><img src="thumbnail4.jpg"></div> <div class="swiper-slide"><img src="thumbnail5.jpg"></div> </div> </div> </div> </template> <script> import Swiper from 'swiper'; import 'swiper/css/swiper.css'; export default { mounted() { const mySwiper = new Swiper('.swiper-container', { pagination: { el: '.swiper-pagination', }, navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, autoplay: { delay: 5000, // 自动播放间隔 }, thumbs: { swiper: { el: '.swiper-container-thumbs', slidesPerView: 5, // 显示缩略图的数量 spaceBetween: 10, // 缩略图之间的间距 autoplay: { delay: 5000, // 缩略图自动播放间隔 }, }, }, }); }, }; </script> <style> .swiper-container-thumbs { margin-top: 10px; } .swiper-container-thumbs .swiper-slide { width: 20%; height: auto; } .swiper-container-thumbs .swiper-slide img { width: 100%; height: auto; } </style> ``` 这里使用 `swiper-container-thumbs` 包含缩略图轮播图,使用 `thumbs` 属性配置缩略图相关的参数,如 `slidesPerView` 控制缩略图显示数量,`spaceBetween` 控制缩略图之间的距离。同时在 `thumbs.swiper` 中使用 `autoplay` 属性设置缩略图自动播放。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值