VUE transition 组件过度效果分析

VUE transition 组件过度效果分析

 作者:高玉涵
 时间:2022.7.8 9:58
 博客:blog.csdn.net/cg_i

过渡效果

 Vue.js 在插入、更新或者移除 DOM 时,提供了多种不同方式的应用过渡效果,包括以下工具:

  • 在 CSS 过渡和动画中自动应用 class;

  • 可以配合使用第三方 CSS 动画库,如 Animate.css;

  • 在过渡钩子函数中使用 JavaScript 直接操作 DOM;

  • 可以配合使用第三方 JavaScript 动画库,如 Velocity.js。

 Vue.js 提供了 transition 的封装组件,在下列情形中,可以给任何元素和组件添加 -entering/leaving 过度。

  • 条件渲染 (使用 v-if );

  • 条件展示 (使用 v-show);

  • 动态组件;

  • 组件根节点;

 简单来说,可以在用户进行操作或者和页面元素进行交互时,提供良好且适当的用户体验效果。

示例代码
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <script src="vue.js"></script>
        <!-- CSS 设置过渡效果 -->
        <style>
            .fade-enter-active, .fade-leave-active{
                transition: opacity .5s
            }
            .fade-enter, .fade-leave-to /* .fade-leave-active in below version 2.1.8 */ {
                opacity: 0;
            }
        </style>
        <title>Title</title>
    </head>
    <body>
        <div id="app">
            <!-- 在节点中定义 click 方法-->
            <button v-on:click="show = !show">
                click
            </button>
            <!-- 效果显示部分-->
            <transition name="fade">
                <p v-if="show">hello Vue</p>
            </transition>
        </div>
        <script>
            var app=new Vue({
                el: '#app',
                data: {
                    show: true
                }
            })
        </script>
    </body>
</html> 
使用方法

 对需要添加动画效果的内容外部包裹一个 <transition>标签,并编写相应的 CSS 样式。

<!-- CSS 样式-->
<style>
    .fade-enter-active, 
    .fade-leave-active{
    transition: opacity .5s
}
.fade-enter, 
.fade-leave-to /* .fade-leave-active in below version 2.1.8 */ {
    opacity: 0;
}
<!-- 效果显示部分-->
<transition name="fade">
    <p v-if="show">hello Vue</p>
</transition>

name 属性

name:string,用于自动生成 CSS 过度类名前缀。例如:name=‘fade’ 将自动拓展为 .fade-enter, .fade-enter-active 等。默认类名前缀为 “v-”。

appear 属性

apper:boolean,是否在初始渲染时使用过渡。默认为 false。

过渡动画原理分析
  • 在进入过渡中,会有 3 个class 的切换:
    在这里插入图片描述
  1. fade-enter:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。
  2. fade-enter-actvie:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。
  3. fade-enter-to:2.1.8 版及以上定义进入过渡的结束状态。在元素被插入之后下一帧生效(与此同时 fade-enter 被移除),在过渡/动画完成之后移除。
  • 在离开的过渡中,也会有 3 个 class 切换:
    在这里插入图片描述
  1. fade-leave:定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。
  2. fade-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开的过程时间,延迟和曲线函数。
  3. fade-leave-to:2.1.8 版及以上定义离开过渡的线束状态。在离开过渡被触发之后下一帧生效(与此同时 fade-leave 被删除)在过渡/动画完成之后移除。

注:被 CSS 属性 包裹的 DOM 标签,修改 v-if 或 v-show 指令控制显示/隐藏均带动画效果。

### Vue3 中页面过渡效果的实现 在 Vue3 中,`<Transition>` 组件用于包裹动态组件或元素,从而轻松应用进入和离开的过渡效果。为了实现页面两侧可收起的面板效果,可以利用 `v-if` 或者 `v-show` 来控制显示逻辑,并配合 CSS 类名完成动画设计[^1]。 #### 进入与离开过渡类名 当 `<Transition>` 被激活时,它会自动为被包裹的内容添加六个特定阶段的 CSS 类: - **v-enter-from**: 定义进入过渡的开始状态。 - **v-enter-active**: 定义整个进入过程中的样式。 - **v-enter-to**: 定义进入过渡的目标状态。 - **v-leave-from**: 定义离开过渡的开始状态。 - **v-leave-active**: 定义整个离开过程中使用的样式。 - **v-leave-to**: 定义离开过渡后的最终状态。 这些类允许开发者精确地定义不同阶段下的视觉变化。 #### 示例代码 下面是一个简单的例子,展示了如何使用 `<Transition>` 和 CSS 创建一个基本的淡入淡出效果: ```html <!-- HTML --> <div id="app"> <button @click="toggle">Toggle</button> <!-- 使用 Transition 包裹要过渡的元素 --> <transition name="fade"> <p v-if="show">这是一个带有过渡效果的文字。</p> </transition> </div> <style scoped> /* 定义 fade 的各个阶段 */ .fade-enter-active, .fade-leave-active { transition: opacity .5s ease; } .fade-enter-from, .fade-leave-to { opacity: 0; } </style> <script setup lang="ts"> import { ref } from 'vue'; const show = ref(true); function toggle() { show.value = !show.value; } </script> ``` 此示例中,点击按钮后文字会在可见性和不可见之间切换的同时执行渐变透明度的变化。 对于更复杂的场景,比如创建侧边栏或其他类型的布局转换,则可能还需要考虑额外的因素,如方向性、延迟时间等参数设置;也可以引入第三方库(例如 animate.css)简化复杂动画的设计工作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值