Vue使用Swiper封装轮播图组件的方法详解

 更新时间:2022年09月05日 17:10:28   作者:chyeonL  
Swiper是一个很常用的用于实现各种滑动效果的插件,PC端和移动端都能很好的适配。本文将利用Swiper实现封装轮播图组件,感兴趣的可以了解一下

Swiper

Swiper是一个很常用的用于实现各种滑动效果的插件,PC端和移动端都能很好的适配。

官网地址:www.swiper.com.cn/

目前最新版本是Swiper7,但众所周知最新版本通常不稳定,所以这里使用Swiper6来封装。

Swiper各版本区别:

为什么要封装组件

因为网页中通常不止一个地方需要用到轮播图,所以直接将轮播图封装成一个共用组件,性能会更好,修改起来也可以快速找到位置。

开始封装

1.下载安装Swiper

 npm install Swiper@6            // @6 是指定版本号为6 的意思
 cnpm install Swiper@6
 yarn add Swiper@6

2.引入css样式文件

import "swiper/swiper-bundle.min.css";

3.引入js文件

import Swiper from 'swiper/swiper-bundle'

4.把官网使用方法中的HTML结构复制粘贴过来

官网使用方法

注意:

  • 下面不是官网使用文档的代码,是我改动过的!
  • 这里的顶层容器类名,不对应的话,后面出大问题!!!

这里官网的使用方法上的容器类名是swiper,对应Swiper7

但因为这里我下载的是Swiper6,所以我改成了它对应的容器类名swiper-container

Swiper6及其以前的版本都是对应类名swiper-container

// 注意这里容器的类名!!
<div class="swiper-container" ref='Carousel'>       
    <div class="swiper-wrapper">
        //v-for循环生成轮播图片
        <div class="swiper-slide" v-for="Carousel in list" :key="Carousel.id">
            <img :src="Carousel.imgUrl" />
      </div>
    </div> 

    <!-- 如果需要分页器 -->
    <div class="swiper-pagination"></div> 

    <!-- 如果需要导航按钮 --> 
    <div class="swiper-button-prev"></div> 
    <div class="swiper-button-next"></div> 

    <!-- 如果需要滚动条 --> 
    <div class="swiper-scrollbar"></div>
</div>

5.初始化Swiper

初始化时间:有图片数据后

但是轮播图的图片通常都是从后台获取回来的,需要确定页面有数据并且DOM结构完全生成后,再初始化。所以最好的方法是: watch监听 + $nextTick

$nextTick: 将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。

原理:watch监听图片数据的变化,$nextTick等到DOM结构完全生成后,立即初始化

watch: {
//list是轮播图数据
    list: {
      immediate: true,   //页面初始化的时候就调用一次handler()
      handler() {
        this.$nextTick(() => {
          var mySwiper = new Swiper(this.$refs.Carousel, {
            direction: "horizontal", // 水平切换选项
            loop: true, // 循环模式选项

            // 如果需要分页器
            pagination: {
              el: ".swiper-pagination",
              clickable: true,     //可点击
              type: "bullets",     //默认样式 小圆点, 还可选其他形状
            },

            // 如果需要前进后退按钮
            navigation: {
              nextEl: ".swiper-button-next",
              prevEl: ".swiper-button-prev",
            },
          });
        });
      },
    },
  }

自定义效果

  • 上面的样式结构是我自定义过的,不是原本的官方使用文档,初次使用建议先复制官网的看看
  • 如果不需要按钮/分页器/滚动栏,可以自己在HTML结构和初始化代码中删减
  • 如果想要其他的滑动效果,可以看看官网其他示例进行选择
  • 如果想要改变具体样式或者配置,可以看看官方API

完整代码

封装的组件名叫Carousel

<template>
  <div class="swiper-container" ref='Carousel'>
    <div class="swiper-wrapper">
      <div class="swiper-slide" v-for="Carousel in list" :key="Carousel.id">
        <img :src="Carousel.imgUrl" />
      </div>
    </div>
    <!-- 如果需要分页器 -->
    <div class="swiper-pagination"></div>

    <!-- 如果需要导航按钮 -->
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
  </div>
</template>

<script>
// 引入swiper的js
import Swiper from "swiper/swiper-bundle.js";
import "swiper/swiper-bundle.min.css";

export default {
  name: "Carousel",
  props: ["list"],
  watch: {
    list: {
      immediate: true,
      handler() {
        this.$nextTick(() => {
          var mySwiper = new Swiper(this.$refs.Carousel, {
            direction: "horizontal", // 垂直切换选项
            loop: true, // 循环模式选项

            // 如果需要分页器
            pagination: {
              el: ".swiper-pagination",
              clickable: true,
              type: "bullets",
            },

            // 如果需要前进后退按钮
            navigation: {
              nextEl: ".swiper-button-next",
              prevEl: ".swiper-button-prev",
            },
          });
        });
      },
    },
  },
};
</script>

<style></style>

效果展示

到此这篇关于Vue使用Swiper封装轮播图组件的方法详解的文章就介绍到这了,更多相关Vue Swiper封装轮播图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue-cli3中vue.config.js配置教程详解

    vue-cli3中vue.config.js配置教程详解

    这篇文章主要介绍了vue-cli3中vue.config.js配置教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • Vue项目之安装引入使用vconsole方式(生产环境不显示)

    Vue项目之安装引入使用vconsole方式(生产环境不显示)

    在Vue2开发中,引入vConsole可以为移动端提供类似浏览器F12的调试工具,支持查看日志、网络请求等功能,vConsole是一个轻量、可拓展的前端调试面板,与框架无关,适用于多种前端框架,安装方法包括npm和CDN两种,可根据项目环境配置是否显示调试面板
    2024-10-10
  • 浅谈el-table中使用虚拟列表对对表格进行优化

    浅谈el-table中使用虚拟列表对对表格进行优化

    我们会经常使用表格,如果数据量大就直接可以分页,如果多条可能会影响表格的卡顿,那么应该如何进行优化,感兴趣的可以了解一下
    2021-08-08
  • vue中v-for通过动态绑定class实现触发效果

    vue中v-for通过动态绑定class实现触发效果

    这篇文章主要介绍了vue中v-for通过动态绑定class实现触发效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • Vue自定义指令的使用实例介绍

    Vue自定义指令的使用实例介绍

    作为使用Vue的开发者,我们对Vue指令一定不陌生,诸如v-model、v-on、等,同时Vue也为开发者提供了自定义指令的api,熟练的使用自定义指令可以极大的提高了我们编写代码的效率,让我们可以节省时间开心的摸鱼
    2023-04-04
  • element-ui 插槽自定义样式居中效果实现思路

    element-ui 插槽自定义样式居中效果实现思路

    这篇文章主要介绍了element-ui 插槽自定义样式居中效果,简单来讲实现思路是通过template标签可理解为一个内嵌组件,宽高重新定义,可在自定义内容外层套一层盒子,让盒子占满所有空间,再使用flex让内部元素居中,需要的朋友可以参考下
    2024-07-07
  • Vuejs使用addEventListener的事件如何触发执行函数的this

    Vuejs使用addEventListener的事件如何触发执行函数的this

    这篇文章主要介绍了Vuejs使用addEventListener的事件触发执行函数的this方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 一文详解Vue中加上key后发生什么

    一文详解Vue中加上key后发生什么

    本文主要介绍了一文详解Vue中加上key后发生什么,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • vue组件值变化但不刷新强制组件刷新的问题

    vue组件值变化但不刷新强制组件刷新的问题

    这篇文章主要介绍了vue组件值变化但不刷新强制组件刷新的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • vue中常用的rules验证方式总结

    vue中常用的rules验证方式总结

    这篇文章主要为大家详细介绍了vue中常用的几种表单rules验证方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-10-10

最新评论