swiper在vue中的应用案例

本文介绍了如何使用Vue.js结合Swiper库实现轮播组件,并利用diff算法处理数据更新时的DOM操作,详细讲解了组件的创建、销毁及数据变化时的复用策略。

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

用到的知识:vue 组件,插槽slot ,diff 算法,vue 生命周期。

swiper 下载地址里面有各种轮播别且还有详细教程。

 

应用代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./swiper-7.4.1/swiper/swiper-bundle.min.css">
    <script src="./vue.js"></script>
    <script src="./swiper-7.4.1/swiper/swiper-bundle.min.js"></script>
    <style>
        .swiper {
            width: 600px;
            height: 300px;
        } 
    </style>
</head>
<body>
    <div id="box">
        <!-- 一开始的 key = 0, 当 2s 后取到后端数据时, key 为数组长度, 进行 diff 算法
        对比发现前后两个 swiper 不一样(因为 diff 算法中 key 值对比),于是删除老的,重新创建新的 dom 结构。
        于是 mounted 触发两次,即第一次创建的 没有轮播内容 dom 和第二次取得数据后,两下对比发现
        第一次创建的 dom 不能复用,删除后重新创建新的 dom  -->
        <swiper :key= "datalist.length">  <!-- 这个方法是一样的 。<swiper v-if = "datalist.length"></swiper> -->
            <swiper-item v-for="items in datalist" :key="items">
                 <img :src="items">
            </swiper-item>
        </swiper>
    </div>
    <script>
        // 创建两个组件
        Vue.component("swiperItem",{
            template:`
            <div class="swiper-slide">
                <slot></slot>
            </div>
            `
        }),
        Vue.component("swiper",{
            template:`
            <div class="swiper">
                <div class="swiper-wrapper">
                    <slot></slot>
                </div>
            <div class="swiper-button-prev"></div>
            <div class="swiper-button-next"></div>
            </div>
            `,
            mounted(){
                console.log("mounted")
                new Swiper ('.swiper', {
                    loop: true, 
                    navigation: {
                        nextEl: '.swiper-button-next',
                        prevEl: '.swiper-button-prev',
                    },
                    autoplay: {
                        delay: 1000,
                        disableOnInteraction: false,
                    },
                }) 
            },
            destroyed(){
                console.log("destroy","第一次创建的 dom 结束了!")
            }
        })
        new Vue({
            el:'#box',
            data:{
                datalist:[]
            },
            mounted(){
            // 模拟请求 
                setTimeout(()=>{
                    this.datalist = [
                        'https://mall.s.maizuo.com/bb4e79ef1de07aab2f8ed91b7fd7e731.jpg',
                        'https://mall.s.maizuo.com/90b7581c565efdf1b3ed8127172d9c87.jpg',
                        'https://mall.s.maizuo.com/e753ab0a0709ff8a7048da1c714c5e06.jpg'
                    ]
                },2000)
            },
        })
    </script>
</body>
</html>

### 如何在 Vue 3 中使用 Swiper #### 安装依赖项 为了能够在项目中集成并使用 Swiper,在基于 Vue CLI 创建的应用程序里,可以通过 npm 或 yarn 来安装所需的包。 ```bash npm install swiper @types/swiper vue-awesome-swiper --save ``` 或者如果偏好使用 Yarn: ```bash yarn add swiper @types/swiper vue-awesome-swiper ``` 此命令会下载最新版本的 `swiper` 和其对应的 TypeScript 类型定义文件以及专门为 Vue 设计的组件库 `vue-awesome-swiper`[^1]。 #### 导入样式表 为了让轮播图正常显示效果,还需要引入 Swiper 的 CSS 文件。可以在项目的入口文件(main.js)或者其他合适的地方加入如下代码来全局加载默认主题: ```javascript import 'swiper/css'; // 如果想要自定义外观,则可以单独导入各个模块的CSS // import 'swiper/modules/navigation/navigation.min.css'; // import 'swiper/modules/pagination/pagination.min.css'; ``` 对于某些特定需求可能只希望局部应用这些样式的话,也可以选择按需载入的方式来进行优化处理。 #### 注册组件 接下来就是注册 Swiper 组件以便于后续可以直接在模板内调用了。同样是在 main.js 中完成这一步骤: ```javascript import { createApp } from 'vue' import App from './App.vue' const app = createApp(App) app.use(SwiperComponent).use(SwiperSlideComponent) app.mount('#app') ``` 这里假设已经通过插件形式封装好了两个核心部件——`SwiperComponent` 和 `SwiperSlideComponent`,它们分别对应着容器和幻灯片本身。 #### 使用示例 最后就可以像下面这样简单地写出一个基本配置下的实例了: ```html <template> <div class="swiper-container"> <!-- Additional required wrapper --> <div class="swiper-wrapper"> <!-- Slides --> <div v-for="(slide, index) in slides" :key="index" class="swiper-slide">{{ slide }}</div> </div> <!-- If we need pagination --> <div class="swiper-pagination"></div> <!-- If we need navigation buttons --> <div class="swiper-button-prev"></div> <div class="swiper-button-next"></div> </div> </template> <script setup lang="ts"> import { ref } from "vue"; let slides = ref(["Slide 1", "Slide 2", "Slide 3"]); </script> <style scoped> /* Add your custom styles here */ .swiper-container { width: 100%; height: 300px; } </style> ``` 上述例子展示了如何创建一组简单的滑动卡片,并且包含了分页器与前后导航按钮的功能选项。当然实际开发过程中还可以根据官方文档进一步调整参数设置以满足更复杂的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值