Vue - 过渡

Posted xiaobaiv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue - 过渡相关的知识,希望对你有一定的参考价值。

单元素/组件的过渡

过渡的类名

在进入/离开的过渡中,会有 6 个 class 切换。

  • v-enter :定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。
  • v-enter-active :定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。
  • v-enter-to : 2.1.8版及以上 定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter 被移除),在过渡/动画完成之后移除。
  • v-leave : 定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。
  • v-leave-active :定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。
  • v-leave-to : 2.1.8版及以上 定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave 被删除),在过渡/动画完成之后移除。
    技术分享图片
    对于这些在过渡中切换的类名来说,如果你使用一个没有名字的 <transition>,则 v- 是这些类名的默认前缀。如果你使用了 <transition name="my-transition">,那么 v-enter 会替换为my-transition-enter


css过渡

常用的过渡都是使用 CSS 过渡。

<style>
/* 可以设置不同的进入和离开动画 */
/* 设置持续时间和动画函数 */
.slide-fade-enter-active {
    transition: all .3s ease;
}
.slide-fade-leave-active {
    transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.slide-fade-enter, .slide-fade-leave-to {
    transform: translateX(10px);
    opacity: 0;
}
</style>
<div id="app">
    <button @click="show = !show">Toggle</button>
    <transition name="slide-fade">
        <p v-if="show">hello</p>
    </transition>
</div>
<script>
new Vue({
    el: '#app',
    data: {
        show: true
    }
})
</script>

技术分享图片

css动画

<style>
.bounce-enter-active {
    animation: bounce-in .5s;
}
.bounce-leave-active {
    animation: bounce-in .5s reverse;
}
@keyframes bounce-in {
    0% {
        transform: scale(0);
    }
    50% {
        transform: scale(1.5);
    }
    100% {
        transform: scale(1);
    }
}
</style>
<div id="app">
    <button @click="show = !show">Toggle</button>
    <transition name="bounce">
        <p v-if="show">hello</p>
    </transition>
</div>
<script>
new Vue({
    el: '#app',
    data: {
        show: true
    }
})
</script>

技术分享图片


自定义过渡类名

我们可以通过以下特性来自定义过渡类名:

  • enter-class
  • enter-active-class
  • enter-to-class (2.1.8+)
  • leave-class
  • leave-active-class
  • leave-to-class (2.1.8+)

他们的优先级高于普通的类名,这对于 Vue 的过渡系统和其他第三方 CSS 动画库,如 Animate.css 结合使用十分有用。

<link href="https://cdn.jsdelivr.net/npm/[email protected]" rel="stylesheet" type="text/css">
<div id="app">
    <button @click="show = !show">Toggle</button>
    <transition 
        name="custom-classes-transition"
        enter-active-class="animated tada"
        leave-active-class="animated bounceOutRight"
    >
        <p v-if="show">hello</p>
    </transition>
</div>
<script>
new Vue({
    el: '#app',
    data: {
        show: true
    }
})
</script>

技术分享图片

以上是关于Vue - 过渡的主要内容,如果未能解决你的问题,请参考以下文章

配置更改后片段丢失过渡动画

FragmentTransaction.replace() 淡入过渡显示“幽灵”片段

使用片段共享过渡时返回过渡无法正常工作

FragmentNavigator 共享过渡不起作用

丑陋的片段过渡到带有覆盖的surfaceview

42 vue3过渡和动画属性控制过渡时长