在Vue中使用Swiper轮播图、同时解决点击轮播图左右切换按钮不生效的问题、同时将轮播图抽离出为一个公共组件

简介: 这篇文章介绍了在Vue中如何使用Swiper插件创建轮播图,解决Swiper左右切换按钮不生效的问题,并展示了如何将Swiper轮播图抽离成一个可复用的公共组件,同时提供了详细的安装、配置和优化建议。

轮播图左右的切换按钮、如果点击没有反应,控制台也没有报错。很大可能是版本问题。如果不指定版本信息、默认安装的是最新的版本。版本过高或者过低都有可能导致无效。目前兼容性和稳定性比较好的是:5.4.5

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

效果展示

Vue中使用轮播图

1、安装Swiper

npm i swiper@5.4.5

在这里插入图片描述
在这里插入图片描述

2、在要使用的页面引入swiper

注:也可以在全局引入、这样在其它页面都可以使用到了。我这里就一个页面使用、就单独在某一个页面引入了。

import Swiper from "swiper";
import "swiper/css/swiper.min.css";

在这里插入图片描述

3、轮播图的位置

3.1 设置一个div放置到页面对应位置

分页器、切换按钮的颜色大小、以及切换效果都可以进行设置。

swiper学习网址

 <div class="swiper-container">
          <div class="swiper-wrapper">
            <div class="swiper-slide" v-for="(item, i) in images" :key="i">
              <img class="carousel-img" :src="item.img" alt="" />
            </div>
          </div>
          <!-- 如果需要分页器 -->
          <div class="swiper-pagination"></div>
          <!-- 如果需要导航按钮 -->
          <div class="swiper-button-prev"></div>
          <div class="swiper-button-next"></div>
        </div>

3.2 设置轮播图的大小和图片完全填充

.swiper-container {
  height: 350px;
  width: 95%;
}

.carousel-img {
  width: 100%;
  height: 100%;
}

3.3 轮播图片

这里使用双向数据绑定、这里的轮播图片后期可以进行替换。比如从后端接口返回的轮播图片替换数组中的。这里暂时写死

    images: [
        { img: "https://www.baidu.com/img/baidu_jgylogo3.gif" },
        { img: "http://localhost:8282/images/21667218837206.jpg" },
        { img: "http://localhost:8282/images/21667218837206.jpg" },
      ],

3.4 初始化一个轮播图

  mounted() {
    var mySwiper = new Swiper(".swiper-container", {
      autoplay: {
        delay: 5000,
        disableOnInteraction: false,
      }, //可选选项,自动滑动

      loop: true, // 循环模式选项
      speed: 4000,

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

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

4、自己遇到的问题

4.1 版本不正确

开始使用的3.4.2 版本的、使用这个版本导致轮播图的左右切换按钮不好使
在这里插入图片描述

4.2 如何在项目中卸载已经安装的包?

npm uninstall swiper

5、如何将Swiper抽离成一个组件?

这里不难看出、全部写在一个页面、会导致页面很臃肿。不如直接将swiper抽离成一个公共组件。哪个页面想使用,直接引入组件

5.1 抽离出公共组件

MySwiper.vue

<template>
  <div class="swiper-container">
    <div class="swiper-wrapper">
      <div class="swiper-slide" v-for="(item, i) in images" :key="i">
        <img class="carousel-img" :src="item.img" alt="" />
      </div>
    </div>
    <!-- 如果需要分页器 -->
    <div class="swiper-pagination"></div>
    <!-- 如果需要导航按钮 -->
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
  </div>
</template>

<script>
import Swiper from "swiper";
import "swiper/css/swiper.min.css";
export default {
  name: "MySwiper",
  data() {
    return {
      images: [
        { img: "https://www.baidu.com/img/baidu_jgylogo3.gif" },
        { img: "http://localhost:8282/images/21667218837206.jpg" },
        { img: "http://localhost:8282/images/21667218837206.jpg" },
      ],
    };
  },
  mounted() {
    var mySwiper = new Swiper(".swiper-container", {
      autoplay: {
        delay: 5000,
        disableOnInteraction: false,
      }, //可选选项,自动滑动

      loop: true, // 循环模式选项
      speed: 4000,

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

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

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.carousel-img {
  width: 100%;
  height: 100%;
}

.swiper-container {
  height: 350px;
  width: 95%;
}
</style>

5.2 在对应页面引入

import MySwiper from "@/components/MySwiper";

  components: {
    MySwiper
  },

在这里插入图片描述

5.3 将组件放到对应位置

组件中可以进行传参的、具体怎样传参。我之前笔记有些、同样可以将后端返回的轮播图图片替换掉数组中的图片。这样就可以动态改变轮播图的图片

    <!-- 轮播图组件 -->
        <MySwiper></MySwiper>

在这里插入图片描述

6、后语

进一步加深了对组件的使用、轮播图好用。学无止境。。。。。。

相关文章
|
2天前
|
缓存 JavaScript 前端开发
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
10 3
|
1天前
|
缓存 JavaScript
Vue 中 computed 与 method 的区别
【10月更文挑战第15天】computed 和 method 是 Vue 中两个重要的选项,它们在功能和特点上存在着明显的区别。理解并合理运用它们的区别,可以帮助我们构建更高效、更具可维护性的 Vue 应用。在实际开发中,要根据具体情况灵活选择使用,以满足不同的需求。
5 2
|
1天前
|
JavaScript 搜索推荐 UED
vue的自定义指令
【10月更文挑战第14天】Vue 自定义指令为我们提供了一种强大的工具,使我们能够更灵活地控制和扩展 Vue 应用的行为。通过合理地使用自定义指令,可以提高开发效率,增强应用的功能和用户体验。
|
19小时前
|
JavaScript 前端开发 Java
vue2知识点:Vue封装的过度与动画
vue2知识点:Vue封装的过度与动画
7 0
|
1天前
|
JavaScript UED
在 Vue 中使用自定义指令
【10月更文挑战第14天】通过合理地使用自定义指令,可以为 Vue 应用带来更多的灵活性和扩展性,提高开发效率和用户体验。
|
4天前
|
JavaScript 前端开发 开发者
Vue v-for 进阶指南:in 与 of 的区别及应用场景 | 笔记
Vue.js 中的 v-for 是强大的遍历指令,但其中的 in 和 of 关键字往往被开发者忽视。尽管它们的用法相似,但适用的场景和数据结构却各有不同。本文将详细探讨 v-for 中 in 和 of 的区别、适用场景以及在实际开发中的最佳使用时机。通过理解它们的差异,你将能够编写更加高效、简洁的 Vue.js 代码,灵活应对各种数据结构的遍历需求。
40 6
|
2天前
|
JavaScript
|
4天前
|
缓存 JavaScript 前端开发
Vue 中动态导入的注意事项
【10月更文挑战第12天】 在 Vue 项目中,动态导入是一种常用的按需加载模块的技术,可以提升应用性能和效率。本文详细探讨了动态导入的基本原理及注意事项,包括模块路径的正确性、依赖关系、加载时机、错误处理、缓存问题和兼容性等,并通过具体案例分析和解决方案,帮助开发者更好地应用动态导入技术。
|
4天前
|
JavaScript API
vue 批量自动引入并注册组件或路由等等
【10月更文挑战第12天】 vue 批量自动引入并注册组件或路由等等
|
5天前
|
JavaScript 算法 前端开发
深入剖析Vue中v-for的使用及index作为key的弊端
深入剖析Vue中v-for的使用及index作为key的弊端
13 2