用Transition组件犯迷糊?看我这篇给你安排的明明白白的

简介: transition组件作为Vue的内置组件,可以用来实现组件的过渡效果。在Vue中,过渡效果是通过CSS来实现的,所以过渡不是如何使用组件,而是如何写CSS。

transition组件作为Vue的内置组件,可以用来实现组件的过渡效果。在Vue中,过渡效果是通过CSS来实现的,所以过渡不是如何使用组件,而是如何写CSS。

本文将介绍如何使用transition组件实现组件的过渡效果。

1. 认识transition组件

vue中提供了两个用于实现过渡效果的组件:transitiontransition-group。其中,transition
组件用于实现单个组件的过渡效果,而transition-group组件用于实现多个组件的过渡效果。

transition-group组件的使用方法与transition组件类似,transition组件用于单个组件的过渡效果,而transition-group
组件用于多个组件的过渡效果,学会了一个就相当于两个都掌握了。

transition组件的使用方法如下:

<template>
  <transition>
    <div v-if="show">Hello</div>
  </transition>
  <button @click="show = !show">Toggle</button>
</template>

<script>
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const show = ref(true);

    return {
      show
    };
  },
});
</script>

<style>
.v-enter-active,
.v-leave-active {
  transition: opacity .5s;
}
.v-enter,
.v-leave-to {
  opacity: 0;
}
</style>

上面的代码是官网的一个例子transition,可以先官网看看,接下来我们来分析它具体的运行机制。

2. 运行机制

transition的英文意思是过渡,过渡是什么呢?过渡是指在一个状态到另一个状态的过程中,会有一个过程,这个过程就是过渡。

vue中一共有6个应用于进入和离开的过渡类名,下面是官网描述的截图,写的很清楚,我就不过度解读了:
image.png

我这里对其进行总结分类解释一下:

  1. 过渡一共有两个状态,一个是进入(enter),一个是离开(leave)。
  2. 进入和离开细分为三个阶段,插入(from),激活(active),离开(to)。
  3. 模式分为三种,官方描述只有两种,一种是in-out,一种是out-in,还有一种是默认效果,就是进入和离开的过渡效果同时进行。

上面的分类1和2是固定的,过渡一定只有进入和离开,进入和离开一定有三个状态,顺序一定是固定的,重要的是模式,来看一下代码示例:

<template>
     <transition>
      <div :key="show" style="background: pink;">默认-{{ show }}</div>
    </transition>

     <transition mode="in-out">
      <div :key="show" style="background: blue;">in-out-{{ show }}</div>
    </transition>

     <transition mode="out-in">
      <div :key="show" style="background: green;">out-in-{{ show }}</div>
    </transition>

    <button @click="show = !show">Toggle</button>
</template>

<script>
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const show = ref(true);
    
    return {
      show
    };
  },
});
</script>

<style>
  div {
    margin: 10px;
    width: 100px;
    height: 50px;
    line-height: 50px;
    background: pink;
    text-align: center;
    float: left;
  }
.v-enter-active, .v-leave-active {
  transition: opacity 2s;
}

.v-enter-to {
  opacity: 0;
}

.v-enter-from {
  opacity: 1;
}

 .v-leave-to {
  opacity: 1;
}


 .v-leave-from {
  opacity: 0;
}
</style>
      

QQ录屏20220929111027.gif

示例效果可能看着不怎么明显,建议移除 opacity属性尝试一下没有过渡效果的状态切换。

上面的示例可以看到:

  • 默认:两种过渡同时进行。
  • in-out:进入的过渡先进行,离开的过渡后进行。
  • out-in:离开的过渡先进行,进入的过渡后进行。

我们一般用的最多的是out-in,因为其他的两个让我们看着有点迷惑,只有out-in看起来最符合我们的直觉,但是另外两个就没有用武之地吗?

3. 实践

上面讲到的只是浅显的基础知识,现在要将这些基础知识用于实践,我要将这三种过渡模式都用到实际场景中:

代码片段

上面只是简简单单的写了一些小效果,这个并不能让人有太多的成就感,你以为它就只有这么多吗?

4. 进阶

上面只是基础,transition组件的基础,他的本质就是在不同的阶段加入不同的css选择器,如果我们再加入一些选择器的基础,再配合transition组件的其他属性,我们就可以做出更多的效果。

4.1. 操作伪类

<template>
  <div class="box">
    <transition name="before-pseudo" mode="out-in" :duration="1000">
      <div :key="show" @click="show = !show">
        点我切换
      </div>
    </transition>
  </div>
</template>

<script>
import {defineComponent, ref} from 'vue';

export default defineComponent({
  setup() {
    const show = ref(true);

    return {
      show
    };
  },
});
</script>

<style>
div.box {
  width: 100px;
  height: 50px;
  position: relative;
  margin: 10px;
  overflow: hidden;
}

div.box div {
  position: absolute;
  left: 0;
  top: 0;
  width: 100px;
  height: 50px;
  line-height: 50px;
  background: pink;
  text-align: center;
}
.before-pseudo-enter-active,
.before-pseudo-leave-active {
  z-index: 9;
}

.before-pseudo-leave-active::before,
.before-pseudo-enter-active::before {
  content: " ";
  display: block;
  position: absolute;
  top: 0; right: 0; bottom: 0; left: 0;
  inset: 0 0 0 0;
  background: hsl(200 100% 80%);
  z-index: -1;
  transition: transform 1s ease;
}

.before-pseudo-leave-from::before,
.before-pseudo-enter-to::before {
  transform: scaleX(0);
  transform-origin: bottom right;
}

.before-pseudo-leave-to::before,
.before-pseudo-enter-from::before {
  transform: scaleX(1);
  transform-origin: bottom left;
}
</style>

操作伪类因为transition组件无法检测到过渡的执行时间,所以需要组件上需要传递执行时间的参数,这里我传递了1000ms,这样就可以让伪类的过渡效果和transition组件的过渡效果同步。

都可以操作伪类,当然也可以操作子元素,这里有个伪元素的示例了,子元素的操作就留给大家自己去尝试了。

4.2. animation动画

<template>
  <div class="box">
    <transition name="bounce">
      <div :key="show" @click="show = !show">
        点我切换
      </div>
    </transition>
  </div>
</template>

<script>
import {defineComponent, ref} from 'vue';

export default defineComponent({
  setup() {
    const show = ref(true);

    return {
      show
    };
  },
});
</script>

<style>
div.box {
  width: 100px;
  height: 50px;
  position: relative;
  margin: 10px;
  overflow: hidden;
}

div.box div {
  position: absolute;
  left: 0;
  top: 0;
  width: 100px;
  height: 50px;
  line-height: 50px;
  background: pink;
  text-align: center;
}
.bounce-enter-active {
  animation: bounce-in 0.5s;
}
.bounce-leave-active {
  animation: bounce-in 0.5s reverse;
}
@keyframes bounce-in {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.25);
  }
  100% {
    transform: scale(1);
  }
}
</style>
上面的效果参考了 官网

这个上面使用了cssanimation属性,这就引出了transition的另一个属性type,有两个可选值transition | animation.

这个属性通常情况下是不需要设置的,内部默认会自动检测执行时间最长的一个。

4.3. appear属性

这个属性本其实不用讲的,就是在组件一开始创建的时候就加一个进入的过渡效果,这个属性默认是false

就上面的几个例子,你把页面刷新是没有任何过渡效果的,你加上这个属性,在刷新就有效果了。

总结

transition组件其实并不复杂,只需要了解他们的过渡过程就好了,过渡开始有一个起点,从这个起点过渡到终点,这就是一个过渡效果,然后再配合transition组件提供的模式,就可以实现各种各样的过渡效果了。

目录
相关文章
|
存储 JSON JavaScript
【2023-08-20】最新PDF.js PDF批注注释插件库:创建、保存和管理PDF注释批注(高亮、文本框、绘图、截屏、历史记录、橡皮檫)-pdf.js
探索基于pdf.js-dist开发的纯Javascript PDF批注插件库,支持保存、导出、导入和管理PDF文件中的批注。多个功能模块为您提供丰富的PDF注释体验。
1044 0
【2023-08-20】最新PDF.js PDF批注注释插件库:创建、保存和管理PDF注释批注(高亮、文本框、绘图、截屏、历史记录、橡皮檫)-pdf.js
|
存储 JSON 前端开发
前端下载文件以及上传图片预览,顺便了解arrayBuffer和blob
前端下载文件以及上传图片预览,顺便了解arrayBuffer和blob
1544 0
pdf.js 怎么预览 base64 类型的 pdf 文件
pdf.js 怎么预览 base64 类型的 pdf 文件
1030 0
pdf.js 怎么预览 base64 类型的 pdf 文件
|
12月前
|
数据采集 资源调度 JavaScript
极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图
本文介绍了使用 Vue Flow 绘制流程图的方法与技巧。Vue Flow 是一个灵活强大的工具,适合自定义复杂的流程图。文章从环境要求(Node.js v20+ 和 Vue 3.3+)、基础入门案例、自定义功能(节点与连线的定制、事件处理)到实际案例全面解析其用法。重点强调了 Vue Flow 的高度灵活性,虽然预定义内容较少,但提供了丰富的 API 支持深度定制。同时,文中还分享了关于句柄(handles)的使用方法,以及如何解决官网复杂案例无法运行的问题。最后通过对比 mermaid,总结 Vue Flow 更适合需要高度自定义和复杂需求的场景,并附带多个相关技术博客链接供进一步学习。
|
API 开发者 UED
Python在游戏开发中的应用?
【6月更文挑战第10天】Python在游戏开发中的应用?
414 1
|
JavaScript 前端开发 算法
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。
740 2
|
人工智能 前端开发 JavaScript
前端大模型入门(二):掌握langchain的核心Runnable接口
Langchain.js 是 Langchain 框架的 JavaScript 版本,专为前端和后端 JavaScript 环境设计。最新 v0.3 版本引入了强大的 Runnable 接口,支持灵活的执行方式和异步操作,方便与不同模型和逻辑集成。本文将详细介绍 Runnable 接口,并通过实现自定义 Runnable 来帮助前端人员快速上手。
656 1
|
JavaScript 容器
Vue 动画 —— 滑动切换动画 / 滑动翻页过渡动画——从顶部到底部、从底部到顶部、从左侧到右侧、从右侧到左侧
Vue 动画 —— 滑动切换动画 / 滑动翻页过渡动画——从顶部到底部、从底部到顶部、从左侧到右侧、从右侧到左侧
1353 0
【Hbuilder】Hbuilder 插件[App]云打包安装失败--已解决
【Hbuilder】Hbuilder 插件[App]云打包安装失败--已解决
806 0

热门文章

最新文章