zoukankan      html  css  js  c++  java
  • 浅谈Vue与swiper轮播图框架结合小案例

    Swiper是纯javascript打造的滑动特效插件,面向手机、平板电脑等移动终端。

    Swiper能实现触屏焦点图、触屏Tab切换、触屏多图切换等常用效果。

    那么Vue与swiper的结合,就显的至关重要了,下面简单介绍一下Vue与swiper结合使用的小案例

    首先,在引入了各个js与css文件以后,写入页面结构

        <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>
        </div>

    在script标签中对swiper进行实例

            var mySwiper = new Swiper ('.swiper-container', {
                loop: true, // 循环模式选项
            }) 

    这时,一个简单的swiper轮播图小案例就实现了。

    此时,我们可以通过定义一个Vue实例,来实现swiper内部轮播页的遍历。

            new Vue({
                el:"#app",
                data:{
                    dataList:[1,2,3]
                },
                mounted(){
                    new Swiper('.swiper-container',{
                        loop:true
                    })
                }
            })

    将页面结构的类名为swiper-slide的标签通过v-for指令,来进行遍历

    <div class="swiper-slide" v-for="data in dataList" :key='index'>{{data}}</div>

    因为在以上正常实例化的过程当中,没有进行一个ajax的异步请求操作,所以我们才可以直接在生命周期的mounted钩子函数当中直接进行实例化,因为此时已经出现了真实dom树。

    但是我们在正常的项目交互当中,肯定是需要请求后端发送过来的数据,这就需要在created钩子函数中进行异步数据请求,此时,如果我们再在mounted中进行swiper的实例化,那么问题就来了。

    在这个地方,我们用setTimeout延时器的方式,来模拟异步请求数据,比如以下代码:

            new Vue({
                el:"#app",
                data:{
                    dataList:[]
                },
                created(){
                    setTimeout(()=>{
                        this.dataList = [1,2,3]
                    })
                },
                mounted(){
                    new Swiper('.swiper-container',{
                        loop:true
                    })
                }
            })

    此时,我们会很明显的发现,运行出来的swiper轮播图,有很大的bug,它无法正常使用了,这是为什么呢?

    这是因为我们通过延时器改变Vue自身数据的时候,会再进行一次虚拟dom树比对,然后进行diff算法,渲染成真实dom树这一个流程,此时,我们mounted钩子函数中的实例早已经完成了, 所以造成了我们的swiper轮播图无法正常使用了

    那此时我们是不是该想,什么时候可以执行这个实例化呢,那么答案肯定是updated钩子函数中

    因为updated钩子函数中,数据已经挂载完毕,数据也已经改变了,并且已经生成了新的真实dom树,所以,在这个钩子函数中,我们页面中所有真实dom都已经存在了,在这里面进行我们的实例化,就不会出现上面我们所描述的问题了。

                updated(){
                    new Swiper(".swiper-container",{
                        loop:true
                    })
                }

    这是初步解决异步请求数据,导致实例化位置需要改变的一个方法,还有其他的比较好用的方法,欢迎大家一起来讨论学习

  • 相关阅读:
    欧拉回路 定理
    UESTC 1087 【二分查找】
    POJ 3159 【朴素的差分约束】
    ZOJ 1232 【灵活运用FLOYD】 【图DP】
    POJ 3013 【需要一点点思维...】【乘法分配率】
    POJ 2502 【思维是朴素的最短路 卡输入和建图】
    POJ 2240 【这题貌似可以直接FLOYD 屌丝用SPFA通过枚举找正权值环 顺便学了下map】
    POJ 1860【求解是否存在权值为正的环 屌丝做的第一道权值需要计算的题 想喊一声SPFA万岁】
    POJ 1797 【一种叫做最大生成树的很有趣的贪心】【也可以用dij的变形思想~】
    js 实现slider封装
  • 原文地址:https://www.cnblogs.com/Huskie-/p/13503152.html
Copyright © 2011-2022 走看看