Vue css过渡 和 js 钩子过渡

css过渡css

 

<transition name="slide">
          <div v-show="!showChatInput" class="slide-footer" @click="showChatInput = !showChatInput" >回复</div>
</transition>
/* 能够设置不一样的进入和离开动画 */
/* 设置持续时间和动画函数 */
.slide-enter-active,
.slide-leave-active{
    transition: all 1s ease;
}
.slide-enter, .slide-leave-to {
    transform: translateY(100%);
    opacity: 0;
}
.slide-enter-to, .slide-leave {
    transform: translateY(0);
    opacity: 1;
}

xx-enter-active,xx-leave-active 是进入和离开的整个过程 设置过渡时间便可ide

xx-enter,xx-leave-to 是 进入前 和离开后的状态(对于简单的过渡,从下面滑入滑出,进入前和和离开后 自己就是同一状态 因此能够写一个样式)函数

xx-enter-to,xx-leave 是 进入后和离开前的状态动画

 

js 钩子函数过渡this

 

<transition v-on:before-enter="beforeEnter"
                            v-on:enter="enter"
                            v-on:after-enter="afterEnter"
                            v-on:enter-cancelled="enterCancelled"

                            v-on:before-leave="beforeLeave"
                            v-on:leave="leave"
                            v-on:after-leave="afterLeave"
                            v-on:leave-cancelled="leaveCancelled">
    
    <com></com> // 某某过渡组件
</transition>
// --------
        // 进入中
        // --------

        beforeEnter: function (el) {
            // ...
            el.style.transform = 'translateY(100%)'
            el.style.opacity = 0
        },
        // 当与 CSS 结合使用时
        // 回调函数 done 是可选的
        enter: function (el, done) {
            // ...
            el.offsetWidth
            el.style.transform = 'translateY(0)'
            el.style.opacity = 1
            el.style.transition = 'all 1s ease'
            done()
        },
        afterEnter: function (el) {
            // ...
            this.footerHeight = '350px'
        },
        enterCancelled: function (el) {
            // ...
        },

        // --------
        // 离开时
        // --------

        beforeLeave: function (el) {
            // ...
            console.log('beforeleave')
            // el.style.transform = 'translateY(0)'
            // el.style.opacity = 1
        },
        // 当与 CSS 结合使用时
        // 回调函数 done 是可选的
        leave: function (el, done) {
            // ...
            console.log('leave')
            setTimeout(() => {
                // el.offsetWidth
                el.style.transform = 'translateY(100%)'
                el.style.opacity = 0
                el.style.transition = 'all 20s ease'
                done()
            })

        },
        afterLeave: function (el) {
            // ...
            this.footerHeight = '40px'
        },
        // leaveCancelled 只用于 v-show 中
        leaveCancelled: function (el) {
            // ...
        }

重点:spa

el.offsetWidth  是用来重绘页面的 不加上这句话 没有过渡效果 也能够用setTimeout((=>{}))
相关文章
相关标签/搜索