• vue过滤动画


    一.使用<transition name="fade"></transition>标签

    name="fade", 是创建个fade的类名写在css中

    • CSS: 在进入/离开的过渡中,会有 6 个 class 切换。
    • v-enter:定义进入过渡的开始状态。在元素被插入时生效,在下一个帧移除。
    • v-enter-active:定义过渡的状态。在元素整个过渡过程中作用,在元素被插入时生效,在 transition/animation 完成之后移除。这个类可以被用来定义过渡的过程时间,延迟和曲线函数。
    • v-enter-to: 2.1.8版及以上 定义进入过渡的结束状态。在元素被插入一帧后生效 (与此同时 v-enter 被删除),在 transition/animation 完成之后移除。
    • v-leave: 定义离开过渡的开始状态。在离开过渡被触发时生效,在下一个帧移除。
    • v-leave-active:定义过渡的状态。在元素整个过渡过程中作用,在离开过渡被触发后立即生效,在 transition/animation 完成之后移除。这个类可以被用来定义过渡的过程时间,延迟和曲线函数。
    • v-leave-to: 2.1.8版及以上 定义离开过渡的结束状态。在离开过渡被触发一帧后生效 (与此同时 v-leave 被删除),在 transition/animation 完成之后移除。

    vue动画显示class机制
    <p v-if="show" class="detial" >hello</p>

    • 1.先添加fade-enter类 // 初始状态
    • <p v-if="show" class="detial fade-enter" >hello</p>
    • 2.再添加fade-enter-active // 变化状态
    • <p v-if="show" class="detial fade-enter fade-enter-active" >hello</p>
    • 3.再添加fade-enter-to, 删除fade-enter // 变化后的状态
    • <p v-if="show" class="detial fade-enter-active fade-enter-to" >hello</p>
    • 4.再逐步删除fade-enter-to fade-enter-active
    • <p v-if="show" class="detial" >hello</p>

    二.动画例子

    html

    <transition name="fade">
        <p v-if="show" class="detial" >hello</p>
    </transition>
    

    css

    .detial{300px;height:300px;background:red;}
    // 过渡条件
    .fade-enter-active, .fade-leave-active {
        transition: all .3s ease;
    }
    // 开始结束状态
    .fade-enter, .fade-leave-to{  /* .fade-leave-active below version 2.1.8 */
        100px;height:100px;
        opacity: 0;
    }
    // fade-leave-to可以换fade-leave-active, 在2.18以下版本
    

      

    三.动画可以在属性中声明 JavaScript 钩子

    <transition
        //1.动画进入之前
        v-on:before-enter="beforeEnter"
    
        //2.动画进入
        v-on:enter="enter"
    
        //3.动画进入之后
        v-on:after-enter="afterEnter"
    
        //动画进入时取消
        v-on:enter-cancelled="enterCancelled"
    
        //4.动画消失之前
        v-on:before-leave="beforeLeave"
    
        //5.动画消失
        v-on:leave="leave"
    
        //6.动画消失之后
        v-on:after-leave="afterLeave"
    
        //动画消失时取消
        v-on:leave-cancelled="leaveCancelled"
    >
      <!-- ... -->
    </transition>
    

      

    四.JavaScript 钩子的进程

    <template>
        <div id="app">
            <input type="button" value="点击显示隐藏" @click="show=!show">
            <transition name="fade"
                @before-enter="beforeEeter"
                @enter="enter"
                @after-enter="afterEnter"
                @enter-cancelled="enterCancelled"
                @before-leave="beforeLeave"
                @leave="leave"
                @after-leave="afterLeave"
                @leave-cancelled="leaveCancelled"
            >
                <div class="detial" v-show="show"></div>
            </transition>
        </div>
    </template>
    

    css

    <style>
    .detial{300px;height:300px;background:red;}
    .fade-enter-active, .fade-leave-active {
        transition: all 5s ease;
    }
    .fade-enter, .fade-leave-active{
        100px;height:100px;
        opacity: 0;
    }
    </style>
    

    vue.js

    <script>
    export default {
        name: 'app',
        data () {
            return {
                show: false,
                msg: 'Welcome to Your Vue.js App'
            }
        },
    
        methods: {
            beforeEeter(){
                console.log("1.动画进入之前")
            },
            enter(){
                console.log("2.动画进入...")
            },
            afterEnter(){
                console.log("3.动画进入之后")
            },
            enterCancelled(){
                console.log("动画进入时取消")
            },
            beforeLeave(){
                console.log("4.动画消失之前")
            },
            leave(){
                console.log("5.动画消失...")
            },
            afterLeave(){
                console.log("6.动画消失之后")
            },
            leaveCancelled(){
                console.log("动画消失时取消")
            }
        }
    }
    </script>
    

      

    五.结合animate.css来使用

    引入animate.css, 可以通过 bower 下载

    $ bower install animate.css
    

    <link rel="stylesheet" href="bower_components/animate.css/animate.css">

     npm下载

    npm install animate.css --save
    

      

    HTML, transition中必须添加animated类名

    <template>
        <div id="app">
            <input type="button" value="点击显示隐藏" @click="show=!show">
            <transition
                enter-active-class="animated zoomInLeft"
                leave-active-class="animated zoomOutRight"
            >
                <div class="detial" v-show="show"></div>
            </transition>
        </div>
    </template>

    控制时间快慢

    <style lang="stylus" scoped>
    .animated {animation-duration: 0.5s;}
    </style>

    六.多个元素一起运动

    <transition-group></transition-group>
    

    1.默认为一个 <span>包裹多个元素, 通过 tag 来改变: tag="div"
    2.总是需要 提供唯一的 key 属性值" :key="1", v-bind:key="2"

    <template>
        <div id="app">
            <input type="button" value="点击显示隐藏" @click="show=!show">
            <transition-group tag="div"
                enter-active-class="animated zoomInLeft"
                leave-active-class="animated zoomOutRight"
            >
                <div class="detial" v-show="show" :key="1"></div>
                <div class="detial" v-show="show" :key="2"></div>
            </transition-group>
        </div>
    </template>
    

    多个元素一起运动例子

    <div id="box">
        <input type="text" v-model="show">
    
        <transition-group enter-active-class="zoomInLeft" leave-active-class="zoomOutRight">
            <p v-show="show" class="animated" v-for="(val,index) in lists" :key="index">
                {{val}}
            </p>
        </transition-group>
    </div>
    

    js

    new Vue({
        el:'#box',
        data:{
            show:'',
            list:['apple','banana','orange','pear']
        },
        computed:{
            lists:function(){
                var arr=[];
                this.list.forEach(function(val){
                    if(val.indexOf(this.show)!=-1){
                        arr.push(val);
                    }
                }.bind(this));
                return arr;
            }
        }
    });
    

      

  • 相关阅读:
    eclipse开发安卓 发短信打电话发送邮件功能
    关于springboot连接数据库是报错
    --Angular-01-关于angular-tree-component--
    --外功篇-Less的学习日志-01-辅助理解Less--
    --兵器谱--git学习记录帖--
    --兵器谱--git初体验--
    --算法恩仇录--实战篇--力扣(LeetCode)--022-括号生成--
    --算法恩仇录--实战篇--力扣(LeetCode)--011-盛水最多的容器--
    --算法恩仇录--实战篇--力扣(LeetCode)--006-Z字形变换--
    --算法恩仇录--实战篇--力扣(LeetCode)--005-最长回文子串--
  • 原文地址:https://www.cnblogs.com/alantao/p/8472409.html
Copyright © 2020-2023  润新知