当前位置: 首页 > article >正文

Vue3+Vite中引用Swiper11自动轮播、左右切换不生效,已解决

1.安装swiper

npm install swiper

2.导入依赖

import Swiper from 'swiper';
import 'swiper/swiper-bundle.css';

3.导入、注册模块(最关键一步)

// 导入Swiper模块
import {Autoplay, Navigation} from "swiper/modules";
// 注册Swiper模块
Swiper.use([Autoplay, Navigation]);

4.实例化Swiper对象

var swiper = new Swiper('#' + props.swiperId, {
        loop: true,
        autoplay: {
            delay: 3000,
            disableOnInteraction: false,
        },
        navigation: {
            nextEl: ".swiper-button-next",
            prevEl: ".swiper-button-prev",
        },
    });

5.创建组件
组件文件名称top-swiper

<template>
    <div class="swiper" :id="swiperId"
         :style="{ height: isMobile? innerWidth + 120 + 'px': innerHeight - 120 + 'px' }">
        <div class="swiper-wrapper">
            <div class="swiper-slide" v-for="(item, index) in swiperList" :key="index">
                <div class="swiper-slide-home flex flex-col justify-center items-center px-4"
                     :style="{ 'background-image': 'url(' + item.imgUrl + ')' }">

                    <div class="swiper-slide-home-title text-white mb-4 qx-animate">{{
                            item.title
                        }}
                    </div>
                    <div class="swiper-slide-home-desc text-white qx-animate">{{
                            item.desc
                        }}
                    </div>
                </div>
            </div>
        </div>
        <div class="swiper-button-prev" slot="button-prev"></div>
        <div class="swiper-button-next" slot="button-next"></div>
    </div>

</template>
<script setup>
import Swiper from 'swiper';
import 'swiper/swiper-bundle.css';

// 导入Swiper模块
import {Autoplay, Navigation} from "swiper/modules";
// 注册Swiper模块
Swiper.use([Autoplay, Navigation]);


import {defineProps} from "vue";
import {onMounted, ref} from "vue";

// 定义props
const props = defineProps({
    swiperId: {
        type: String,
        default: 'swiper-container'
    },
    swiperList: {
        type: Array,
        default: () => []
    }
});


// 获取窗口大小
const innerWidth = ref(window.innerWidth);
const innerHeight = ref(window.innerHeight);
// 判断是否为移动端
const isMobile = ref(innerWidth.value < 768);

// 监听窗口大小变化
window.addEventListener('resize', () => {
    innerWidth.value = window.innerWidth;        // 获取窗口宽度
    innerHeight.value = window.innerHeight;      // 获取窗口高度
    isMobile.value = innerWidth.value < 768;      // 判断是否为移动端
});


// 组件挂载完成后初始化swiper
onMounted(() => {
    var swiper = new Swiper('#' + props.swiperId, {
        loop: true,
        autoplay: {
            delay: 3000,
            disableOnInteraction: false,
        },
        navigation: {
            nextEl: ".swiper-button-next",
            prevEl: ".swiper-button-prev",
        },
    });

})
</script>
<style lang="scss" scoped>
.swiper {
    width: 100%;
    .swiper-slide-home {
        height: 100%;
        background-size: cover;
        background-position: center;
        background-repeat: no-repeat;

        .swiper-slide-home-title {
            font-size: 36px;
            font-weight: lighter;
        }
        
        .swiper-slide-home-desc {
            font-size: 20px;
            font-weight: lighter;
        }
    }
}
</style>

6.组件的使用

<template>
    <TopSwiper :swiperList="swiperList" swiper-id="swiper-index"></TopSwiper>
</template>
<script setup>
import TopSwiper from "@/components/top-swiper/index.vue";
import {reactive} from "vue";

//轮播图数据
import backgroundImg2 from "@/assets/image/banner02.png";
//轮播图集合
const swiperList = reactive([
    {
        imgUrl: backgroundImg2,
        title: '我们能做什么',
        desc: ' 储能设备管理 | 光伏板 | 消费设备管理 | 任务工单 | 人员管理 | 在线缴费 | 设备保修',
        link: ''
    },
    {
        imgUrl: backgroundImg2,
        title: '我们能做什么',
        desc: ' 储能设备管理 | 光伏板 | 消费设备管理 | 任务工单 | 人员管理 | 在线缴费 | 设备保修',
        link: ''
    }
]);
</script>
<style scoped lang="scss">

</style>

7.依赖版本

 "dependencies": {
    "sass": "^1.32.13",
    "sass-loader": "^10.1.1",
    "swiper": "^11.1.14",
    "vue": "^3.4.37",
    "vue-router": "^4.4.5",
    "vite": "^5.4.1",
    "@vitejs/plugin-vue": "^5.1.2"
  },

http://www.kler.cn/a/321835.html

相关文章:

  • mysql每日一题(上升的温度,date数据的计算)
  • 单片机设计电流与温度监控python上位机监控平台设计
  • python怎么设置环境变量
  • python——面向对象
  • androidstudio下载gradle慢
  • 第一个 Flutter 项目(1)共46节
  • Android常用C++特性之std::equal
  • 【python append函数的一些细节】
  • 音频转MP3格式困难?如何轻松实现wav转mp3?
  • Vue3中el-table组件实现分页,多选以及回显
  • 基于 STM32 的高精度 PID 温控系统设计与实现:采用 Pt1000 温度传感器与 PWM 控制技术
  • HT5169内置BOOST升压的11W I2S输入D类音频功放
  • 【游戏设计】游戏中需要管理的数据分类
  • MYSQL-查看表中字段属性语法(三)
  • 找质数的方式
  • MATLAB中的无线通信系统测试和验证方法有哪些
  • 代码随想录Day17 图论-1
  • 调和级数枚举+前缀和,CF 731F - Video Cards
  • flutter 设置字体大小,适应各种屏幕
  • 【LeetCode:2535. 数组元素和与数字和的绝对差 + 模拟】
  • 16.面试算法-树的层次遍历与相关面试题
  • ConfigurationManager类功能如何使用
  • 网络原理 - TCP/IP
  • SkyWalking 环境搭建部署
  • 【JAVA开源】基于Vue和SpringBoot的网上租赁系统
  • 获取鼠标当前位置上的元素