美文网首页
Vue-使用动画库Animate及解决谷歌浏览器不支持的问题

Vue-使用动画库Animate及解决谷歌浏览器不支持的问题

作者: 月上秦少 | 来源:发表于2019-07-18 10:24 被阅读0次

    1. Demo1:使用Vue组件transition并自定义简单动画

    • 1.创建Vue实例
    const vm = new Vue({
        data: {
            msg: '赤橙黄绿青蓝紫',
            flag: true,
        },
        methods: {
            // 定义动画生命周期钩子对应执行函数
            beforeEnter(el) {
                console.log('动画进入之前!');
                this.msg = "赤";
                el.style.background = 'red';
            },
            enter(el) {
                console.log('动画进入!');
                this.msg = "橙";
                el.style.background = 'orange';
            },
            afterEnter(el) {
                console.log('动画进入之后!');
                this.msg = "黄";
                el.style.background = 'yellow';
            },
            beforeLeave(el) {
                console.log('动画离开之前!');
                this.msg = "绿";
                el.style.background = 'green';
            },
            leave(el) {
                console.log('动画离开!');
                this.msg = "青";
                el.style.background = 'cyan';
            },
            afterLeave(el) {
                console.log('动画离开之后!');
                this.msg = "蓝";
                el.style.background = 'blue';
    }
        }
    }).$mount('#app'); 
    

    2.在html中将需要加动画的元素放在transiton标签中,并且给该标签定义一个name属性

    <div id="app" class="container text-center">
        <button @click="flag=!flag" class="btn btn-warning">展示动画效果</button>
    
        <!--    transition生命周期钩子 -->
        <transition name="v"
                                @before-enter="beforeEnter" 
                                @enter="enter" 
                                @after-enter="afterEnter" 
                                @before-leave="beforeLeave" 
                                @leave="leave" 
                                @after-leave="afterLeave">
            <!-- <transition>标签有name属性,在设置css时,要加上'.name属性值-。。。' -->
            <!-- 必须将需要动画操作的元素放在<transiton>标签里面 -->
            <p v-show="flag" class="h3 text-muted">{{msg}}</p>
        </transition>
    </div>
    
    • 3.定义CSS动画,使用特殊的类名
    /* 定义动画:.name属性-。。。*/
    .v-enter-active,
    .v-leave-active {
        transition: all 3s ease;
    }
    
    .v-enter-active {
        opacity: 1;
        width: 200px;
        height: 200px;
    }
    
    .v-leave-active {
        opacity: .5;
        width: 50px;
        height: 50px;
    }
    
    /* .-enter需要放在.-enter-active的后面 */
    .v-enter {
        opacity: .5;
        width: 50px;
        height: 50px;
    }
    

    查看代码效果:Demo1

    这里的v-...中的v<transition name="v"里面的name属性值。

    Learn More:
    官方:Vue内置组件-transition
    官方:进入/离开 & 列表过渡

    2. Demo2:使用Vue组件transition并结合第三方库Animate.css

    Demo2
     npm install animate.css --save
    // 或者:
    <head>
      <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.2/animate.min.css">
    </head>
    
    • 在html中使用
    <div class="animation" v-for="(value, index) in animations">
            <div class="wrap"> 
    <!--            div.wrap使这一块区域形成BFC,与其他区域互不影响。 -->
                <transition :enter-active-class="'animated delay-1s ' + value" :leave-active-class="'animated ' + value">
                <p v-show="flags[index].show" :style="{background: colors[index % colors.length]}" @mouseenter="enter(index)" @mouseout="out(index)" :title="value">{{value}}</p>
            </transition>
        </div>
    

    查看代码及效果: Demo2

    3.遇到的坑

    • 1.在Vue中,使用v-show绑定数组中的value,修改数组的值之后,页面并不会实时渲染。
      解决方式:
      1.将数组值存在数组对象中(Demo2使用此方式解决)
      2.使用Vue.$set方法。

    问题原因详细解释:

    1. vue中遇到的坑 --- 变化检测问题(数组相关)

    2. 官方解释:深入响应式原理

    解决方式:

    • 1.win + R
    • 2.Enter: %windir%\system32\SystemPropertiesPerformance.exe
    • 3.选中第一行,确认
      让Windows选择计算机的最佳设置
      (Let Windows choose what's best for my computer)

    相关文章

      网友评论

          本文标题:Vue-使用动画库Animate及解决谷歌浏览器不支持的问题

          本文链接:https://www.haomeiwen.com/subject/rmhklctx.html