介绍 Transistion

路由组件的切换、动态组件的切换、v-if 条件渲染组件以及 v-show 显示组件原本是没有任何过渡(CSS 动画)效果的。然而,Vue 的内置组件<Transition>可以实现过渡效果。Vue 过渡有两种方式:1. 基于 CSS 的过渡;2. 基于 JS 钩子函数的过渡

过渡的阶段

上图是过渡的 6 个阶段示意图。总体是进入和离开两个阶段,进入和离开又各自有两个阶段。下表格是对每一个阶段的解释:

过渡是组件被渲染到页面和组件从页面被销毁的过程,即进入和离开。进入和离开实现过渡效果使用的是 CSS 样式,而样式写在 Transistion 组件规定好的 6 个类名里。如下表格:

阶段 作用
v-enter-from 进入动画的起始状态。在元素插入之前添加,在元素插入完成后的下一帧移除。
v-enter-active 进入动画的生效状态。应用于整个进入动画阶段。在元素被插入之前添加,在过渡或动画完成之后移除。这个 class 可以被用来定义进入动画的持续时间、延迟与速度曲线类型。
v-enter-to 进入动画的结束状态。在元素插入完成后的下一帧被添加 (也就是 v-enter-from 被移除的同时),在过渡或动画完成之后移除。
v-leave-from 离开动画的起始状态。在离开过渡效果被触发时立即添加,在一帧后被移除。
v-leave-active 离开动画的生效状态。应用于整个离开动画阶段。在离开过渡效果被触发时立即添加,在过渡或动画完成之后移除。这个 class 可以被用来定义离开动画的持续时间、延迟与速度曲线类型。
v-leave-to 离开动画的结束状态。在一个离开动画被触发后的下一帧被添加 (也就是 v-leave-from 被移除的同时),在过渡或动画完成之后移除。

v-enter-activev-leave-active 给我们提供了为进入和离开动画指定不同速度曲线的能力。

进入和离开

  1. 进入:进入就是组件(元素)渲染到页面上的过程就是进入阶段;
  2. 离开:离开就是组件已经被渲染到页面中,由于条件渲染(或切换路由组件或 v-show 是否显示等),这个组件从页面上被销毁的过程就是离开阶段。

进一步理解

结合上图和表格一起看,x-xx-active 代表着 x-xx-from 和 x-xx-to 之间的持续阶段。比如,组件(元素或标签)进入的阶段是 from 到 to 之间的持续阶段,即 v-enter-active。在这个阶段里,就是要对这个进入动画定义动画持续时间、延迟等。

假如,我进入房间到床上这一过程就是进入阶段,这一阶段我的速度是如何的?在 active 中进行定义。开门时我是什么状态;到床上我最后又是什么状态,即 from 和 to 的阶段。

离开阶段

<template>
<button @click="show = !show">Click</button>
<Transition>
<p v-if="show">Hello Vue!</p>
</Transition>
</template> <style scoped>
.v-leave-active {
transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);
} .v-leave-from {
transform: translateX(0px);
opacity: 1;
} .v-leave-to {
transform: translateX(100px);
opacity: 0;
}
</style>

<Transition>内置组件中包裹了一个 p 标签。当我们点击按钮时,若 show 是 false,那么该标签从页面上消失,即离开阶段,也就是 v-leave-to、v-leave-from、v-leave-active。

进入阶段

p 标签从页面中渲染,即进入阶段,也就是 v-enter-to、v-enter-from、v-enter-active。

.v-enter-active {
transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);
} .v-enter-from {
transform: translateX(100px);
opacity: 0;
} .v-enter-to {
transform: translateX(0px);
opacity: 1;
}



完整过渡

重命名过渡

上面的所有案例都是 v-xx-xx,这个 v 是默认的过渡类名,给<Transition>添加一个 name 属性,对过渡类名进行重命名,替换 v

rawProps 代表组件的属性(attribute),组件有 12 个属性。修改 name 就能替换掉默认的类名。修改第 4 ~ 12 个属性就能够完全自定义类名。但是,每一个对应的阶段所发生的动画效果不会有影响。

<Transition name="fade"></Transition>
.fade-enter-from {
opacity: 0;
} .fade-enter-to {
opacity: 1;
}

自定义过渡

如果只是对过渡组件添加一个属性 name,只能修改前缀名。如上一小节所述,后缀名也是可以修改的,而只需要在对应的过渡阶段上添加对应的属性(props)即可:

  1. enter-from-class
  2. enter-active-class
  3. enter-to-class
  4. leave-from-class
  5. leave-active-class
  6. leave-to-class

这个功能在你想要在 Vue 的动画机制下集成其他的第三方 CSS 动画库时非常有用:

<Transition
name="custom-classes"
enter-active-class="animate__animated animate__tada"
leave-active-class="animate__animated animate__bounceOutRight">
<p v-if="show">Hello Vue!</p>
</Transition>

Vue3 Transition 过渡效果之基于 CSS 过渡的更多相关文章

  1. Vue3 Transition 过渡效果之切换路由组件

    复习作用域插槽 组件可以被插入些许节点作为其子节点,插槽<slot>就是一个接口(或桥梁)引导这些节点进入组件.这些节点应该被渲染到组件里的具体哪个位置,就是具名插槽的作用.就像是给手机冲 ...

  2. 深入理解CSS过渡transition

    × 目录 [1]定义 [2]过渡属性 [3]持续时间[4]延迟时间[5]时间函数[6]多值[7]阶段[8]触发[9]API 前面的话 通过过渡transition,可以让web前端开发人员不需要jav ...

  3. Vue过渡效果之CSS过渡

    前面的话 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.本文将从CSS过渡transition.CSS动画animation及配合使用第三方CSS动画库(如animate. ...

  4. CSS背景渐变支持transition过渡效果

    background-image 是不支持 CSS3 的transition过渡效果的,而CSS3 gradient 渐变作为背景图片存在的时候, 下面的CSS不会有过渡效果 <div clas ...

  5. css过渡transition属性

    一.CSS3 过渡 (一).CSS3过渡简介 CSS3过渡是元素从一种样式逐渐改变为另一种的效果. 实现过渡效果的两个要件: 规定把效果添加到哪个 CSS 属性上 规定效果的时长 定义动画的规则 过渡 ...

  6. Vue css过渡 和 js 钩子过渡

    css过渡 <transition name="slide"> <div v-show="!showChatInput" class=&quo ...

  7. 基于css的一些动画

    最近因为期末复习周,博客更新鸽了很久,趁着考完试还记得这件事,把之前的大作业里出现过的css动画总结一下 页脚的联系方式图标 这个图片原型是一个静态图 动画效果如下 html <div clas ...

  8. 047——VUE中css过渡动作实例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. css过渡和2d详解及案例

    css过渡和2d详解及案例(案例在下方,不要着急) 本文重点: 1.在2D变化使用过程中,有些需求需要两种或两种以上的变化同时使用, 值得注意的是尽量把位移变化放在最前面,把其他变化放在最后面,属性值 ...

随机推荐

  1. .NET C#基础(2):方法修饰符 - 给方法叠buff

    0. 文章目的   本文面向有一定.NET C#基础知识的学习者,介绍C#中的方法修饰符的含义和使用以及注意事项.   1. 阅读基础   理解C#基本语法(如方法声明)   理解OOP基本概念(如多 ...

  2. Java随谈(六)## 我们真的理解 Java 里的整型吗?

    我们真的理解 Java 里的整型吗 整型是我们日常生活中最常用到的基础数据类型,看这篇文章之前,我想问: 我们真的像自己认为的那么理解 Java 内的整型吗? 也许看完本篇文章你就有自己的答案. C ...

  3. vue组件data函数

    vue组件data通常定义为一个函数并return一个对象,对象中定义的就是组件数据,当然定义数据还有props.computed等方式. data如果直接定义为对象data: {message: ' ...

  4. 记录一个奇葩 bug [Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)]

    关于 flask 的一个记录 代码 @auth.login_required @app.route('/add', methods=['POST']) def add(): if request.me ...

  5. 程序分析与优化 - 7 静态单赋值(SSA)

    本章是系列文章的第七章,终于来到了鼎鼎大名的SSA,SSA是编译器领域最伟大的发明之一,也是影响最广的发明. 本文中的所有内容来自学习DCC888的学习笔记或者自己理解的整理,如需转载请注明出处.周荣 ...

  6. tableSizeFor

    HashMap tableSizeFor() /** Returns a power of two size for the given target capacity. 1.(不考虑大于最大容量的情 ...

  7. zabbix监控钉钉报警

    1. bash脚本 #!/bin/bash to=$1 subject=$2 text=$3 #此处的 xxxxx 就是刚刚复制存留的 api 接口地址. curl -i -X POST \ 'htt ...

  8. 5.RDD操作综合实例

    一.词频统计 A. 分步骤实现 1.准备文件 (1)下载小说或长篇新闻稿 (2)上传到hdfs上 2.读文件创建RDD 3.分词 4. ·排除大小写lower(),map() ·标点符号re.spli ...

  9. MyBatis关联查询和懒加载错误

    MyBatis关联查询和懒加载错误 今天在写项目时遇到了个BUG.先说一下背景,前端请求更新生产订单状态,后端从前端接收到生产订单ID进行查询,然后就有问题了. 先看控制台报错: org.apache ...

  10. Tomcat深入浅出——Servlet(三)

    零.HttpServletRequest 上一篇已经介绍了这个接口,现在补充些内容 首先介绍一下作用域: jakarta.servlet.jsp.PageContext pageContext 页面作 ...