1.8 Vue 过滤及动画

Vue过渡动画
  • Vue在插入、更新或者移除DOM时,提供多种不同方式的应用过渡效果。
  • Vue提供了内置的过渡封装组件,该组件用于包裹要实现过渡效果的组件。
过渡时,会有6个类名在enter/leave的过渡中切换
  • v-enter:定义进入过渡的开始状态。在元素被插入时生效,在下一个帧移除。
  • v- enter-active:定义进入过渡的结束状态。在元素被插入时生效,在 transition/animation完成之后移除。
  • v-enter-to:2.1.8版及以上定义进入过渡的结束状态。在元素被插入之后下一帧生效(与此同时v- enter被移除),在过渡/动画完成之后移除。
  • v-leave:定义离开过渡的开始状态。在离开过渡被触发时生效,在下一个帧移除。
  • v-leave-active:定义离开过渡的结束状态。在离开过渡被触发时生效,在 transition/animation完成之后移除。
  • v-leave-to:2.1.8版及以上定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效(与此同时v-leave被删除),在过渡/动画完成之后移除。
    在这里插入图片描述
钩子函数
  • 钩子函数可以结合CSStransitions/animations使用,也可以单独使用。
  • 当只用 JavaScript过渡时,在 enter 和 leave 中必须使用done进行回调。否则,它们将被同步调用,过渡会立即完成。

demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/2.0.5/velocity.min.js"></script>
</head>
<body>
    <div id="app">
        <button v-on:click = "show = !show">
            点我
        </button>
        <transition
            v-on:before-enter="beforeEnter"
            v-on:enter="enter"
            v-on:leave="leave"
            v-bind:css="false">
            <p v-if="show">
                Vuejs 钩子函数动画
            </p>
        </transition>
    </div>
    <script type="text/javascript">
        new Vue({
            el: '#app',
            data: {
                show: false
            },
            methods: {
                beforeEnter: function(el) {
                    el.style.opacity = 0
                    el.style.transformOrigin = 'left'
                },
                enter: function(el, done) {
                    Velocity(el, {opacity: 1, fontSize: '1.4em'},{ duration: 300})
                    Velocity(el, {fontSize: '1em'},{ complete: done})
                },
                leave: function (el, done) {
                    Velocity(el, { translateX: '15px', rotateZ: '50deg'}, {duration: 600})
                    Velocity(el, { rotateZ: '100deg'}, { loop: 2})
                    Velocity(el, {
                        rotateZ: '45deg',
                        translateY: '30px',
                        translateX: '30px',
                        opacity: 0
                    },{ complete: done })
                }
            }
        })
    </script>
</body>
</html>
初始渲染过渡
  • 可以通过 appear特性设置节点在初始渲染的过渡
  • 右侧代码默认和进入/离开过渡一样,同样可以自定义CSS类名。
  • 无论是 appear特性还是v-on:appear钩子都会生成初始渲染过渡。
多个元素过渡
  • 当有相同标签名的元素切换时,需要通过 key attribute 设置唯一的值来标记以让 Vue 区分它们,否则 Vue 为了效率只会替换相同标签内部的内容。即使在技术上没有必要,给在 <transition> 组件中的多个元素设置 key 是一个更好的实践。
多个组件过渡
  • 多个组件的过渡简单很多 - 我们不需要使用 key attribute。相反,我们只需要使用动态组件
列表过渡
  • 同时渲染整个列表,在这种场景中,使用<transition-group>组件。
可复用的过渡
  • 过渡可以通过 Vue 的组件系统实现复用。要创建一个可复用过渡组件,你需要做的就是将 <transition> 或者 <transition-group> 作为根组件,然后将任何子组件放置在其中就可以了。
动态过渡
  • 在 Vue 中即使是过渡也是数据驱动的,动态过渡最基本的例子是通过 name特性来绑定动态值。
  • 所有过渡 attribute 都可以动态绑定,但我们不仅仅只有 attribute 可以利用,还可以通过事件钩子获取上下文中的所有数据,因为事件钩子都是方法。
状态过渡
  • 对于数据要么本身就以数值形式存储,要么可以转换为数值。有了这些数值后,我们就可以结合 Vue 的响应式和组件系统,使用第三方库来实现切换元素的过渡状态。

这里就做下笔记
官网上讲的很细,很多好看的demo https://cn.vuejs.org/v2/guide/transitions.html

发布了56 篇原创文章 · 获赞 20 · 访问量 7363

猜你喜欢

转载自blog.csdn.net/qq_36826618/article/details/104229670
1.8