vue3过渡动画的详解

Vue3过渡动画的详解

在 Vue3 中,过渡动画的实现更加简单易用,本文将从以下几个方面介绍Vue3的过渡动画:

  • 过渡类名
  • 过渡模式
  • 自定义过渡函数
  • 示例程序

过渡类名

在 Vue3 中,过渡类名的命名规则和 Vue2 一样。当元素被插入、更新或删除时,你可以在元素上添加不同的 class 名称来指定不同的状态。

Vue3 中的过渡类名和 Vue2 中的类名一样,分别包括以下几个:

类名 说明
v-enter 进入的起点状态,注意该类名只会在元素插入时生效
v-enter-active 进入的终点状态,表示元素完成过渡,在动画时间段内需要维持
v-enter-to Vue3新增,进入的终点状态,事实上和v-enter-active表现相同;在动画结束后会被删除
v-leave 需删除的状态,只在使用 <transition> 组件时,组件从 DOM 中移除时生效
v-leave-active 需删除的状态,只在使用 <transition> 组件时,组件从 DOM 中移除时生效
v-leave-to Vue3 新增,需要删除的状态,只有在定义不同的 v-leave 和 v-leave-to 类名时使用;在动画结束后会被删除
v-move 在列表渲染中使用,需要移动的元素的起始状态
v-move-active 在列表渲染中使用,需要移动的元素的终止状态,表示移动完成,在动画时间段内需要维持

在定义转换动画时,我们需要添加这些不同的 class 名称,以指定不同的状态。通常情况下,我们会搭配 CSS3 实现不同状态到另一种状态的变换。

下面是一个简单的例子,展示 <transition> 组件如何在 Vue3 中使用:

<template>
  <div>
    <button @click="show = !show">toggle</button>
    <transition name="fade" @before-enter="beforeEnter" @after-enter="afterEnter">
      <div v-if="show" key="msg">hello</div>
    </transition>
  </div>
</template>

<script>
import {ref} from 'vue'

export default {
  setup () {
    const show = ref(false)
    const beforeEnter = function (el) {
      el.style.opacity = 0
    }
    const afterEnter = function (el) {
      el.style.opacity = 1
    }
    return {
      show,
      beforeEnter,
      afterEnter
    }
  }
}
</script>

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

上面的代码中,我们实现了一个基本的渐变过渡动画。在其中设置 beforeEnterafterEnter 两个生命周期函数回调,对元素样式进行控制。

过渡模式

Vue3 中提供了不同的过渡模式,包括 in-outout-in 或者同时触发。在 Vue3 中,通过设置 mode 来实现不同的过渡模式。默认模式为同时触发。

下面是三种不同过渡模式的示例:

in-out

在 in-out 模式中,新元素被插入到旧元素之后,并且新元素过渡完成后,旧元素被删除。

<template>
  <transition name="fade" mode="in-out">
    <button @click="show = !show" key="toggle">toggle</button>
    <div v-if="show" key="msg">hello</div>
  </transition>
</template>

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

out-in

在 out-in 模式中,旧元素先过渡完成后,新元素被插入到 DOM 中。

<template>
  <transition name="fade" mode="out-in">
    <button @click="show = !show" key="toggle">toggle</button>
    <div v-if="show" key="msg">hello</div>
  </transition>
</template>

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

同时触发

在同时触发模式中,新元素和旧元素同时存在,直到新元素过渡完成。

<template>
  <transition name="fade">
    <button @click="show = !show" key="toggle">toggle</button>
    <div v-if="show" key="msg">hello</div>
  </transition>
</template>

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

自定义过渡函数

有时候,你可能希望使用自定义的过渡函数或者钩子函数,以满足一些应用特殊的过渡效果需求。在 Vue3 中,解决这个问题十分简单。

在 Vue3 中,可以在 <transition> 组件上增加属性 csstypecss 属性用于指定渐变效果使用的过渡函数,type 属性用于指定过渡函数的类型。

示例代码如下:

<template>
  <transition name="fade" :css="false" :type="{beforeEnter: beforeEnter}">
    <button @click="show = !show" key="toggle">toggle</button>
    <div v-if="show" key="msg">hello</div>
  </transition>
</template>

<script>
import { ref } from 'vue'
export default {
  setup () {
    const show = ref(false)
    const beforeEnter = function (el) {
      el.style.opacity = 0
      el.style.transformOrigin = 'center'
      el.style.transform = 'scale(.1)'
    }
    return {
      show,
      beforeEnter,
    }
  }
}
</script>

<style scoped>
.fade-enter-active, .fade-leave-active {
  transition: opacity .5s, transform 1s cubic-bezier(.75,-0.48,.26,1.52);
}
.fade-enter, .fade-leave-to{
  opacity:0;
}
</style>

在上面的代码中,我们通过设置 :css="false" 属性阻止 Vue3 使用默认的 transition 样式。然后,通过添加 type 属性和自定义的钩子函数来实现了 beforeEnter 的自定义过渡函数。

示例程序

参考Vue2的官方示例,这里提供了一个简单的Vue3过渡动画示例代码,包含了过渡类名、模式以及自定义过渡函数的使用。

<template>
  <div id="demo">
    <button v-on:click="toggle">Toggle</button>
    <transition :name="transitionName" :mode="transitionMode" :duration="{ appear: 5000, enter: 5000, leave: 5000 }" @before-enter="beforeEnter" @after-enter="afterEnter">
      <div v-if="show">
        Demo!
      </div>
    </transition>
  </div>
</template>

<script>
import { ref } from 'vue'

export default {
  name: 'hello',

  setup: function () {
    const show = ref(true)
    const transitionName = ref('')
    const transitionMode = ref('')

    const beforeEnter = function (el) {
      el.style.opacity = 0
      el.style.transformOrigin = 'center'
    }

    const afterEnter = function (el) {
      el.style.opacity = 1
    }

    const toggle = function () {
      show.value = !show.value
      transitionName.value = 'fade'
      transitionMode.value = 'out-in'
      if (show.value) {
        beforeEnter(document.getElementById('demo').children[1])
      }
    }
    return {
      show,
      toggle,
      transitionName,
      transitionMode,
      beforeEnter,
      afterEnter
    }
  }
}
</script>

<style scoped>
.fade-enter-active {
  transition: all .5s ease;
}

.fade-enter,
.fade-leave-to {
  transform: translateX(100%);
  opacity:0;
}
</style>

总结

通过本文介绍,我们了解了如何在 Vue3 中使用过渡动画。我们可以通过设置过渡类名、过渡模式以及自定义过渡函数来实现不同的效果。

我们希望,本文的介绍能够对您有所帮助,欢迎留言探讨。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue3过渡动画的详解 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 利用html+css实现菜单栏缓慢下拉效果的示例代码

    实现菜单栏缓慢下拉效果需要用到HTML和CSS,具体步骤如下: 首先,在HTML中创建一个菜单栏的结构,使用ul和li标签来创建菜单栏的列表项。例如: <nav> <ul> <li><a href="#">Home</a></li> <li><a h…

    css 2023年6月9日
    00
  • JavaScript知识点总结之如何提高性能

    下面我来详细讲解一下“JavaScript知识点总结之如何提高性能”的完整攻略。 前言 在编写JavaScript代码时,我们经常会遇到一些性能问题,例如代码运行缓慢、浏览器崩溃等。这时,我们需要优化代码的性能,提高代码的执行效率。以下是一些优化代码性能的技巧。 提高代码性能的技巧 1. 使用变量缓存 在JavaScript中,每次访问一个变量或对象的属性时…

    css 2023年6月11日
    00
  • React中常见的动画实现的几种方式

    下面是React中常见的动画实现的几种方式的详细攻略: 1. 使用CSS实现动画 在React中,使用CSS来实现动画是最常用的方式之一。CSS动画可以通过@keyframes关键帧来定义动画过程,也可以使用transition属性来实现简单的过渡动画。 使用@keyframes关键帧 在CSS中,我们可以使用@keyframes关键帧来定义动画过程,然后在…

    css 2023年6月10日
    00
  • 基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片

    实现在线拍照和浏览照片需要涉及到前端框架jQuery,后端语言PHP和数据库管理系统Mysql。下面详细讲解完整实现攻略: 第一步:环境搭建 安装服务器软件,如XAMPP或WAMP等。 启动服务器软件,并配置好PHP和Mysql。 安装jQuery库,可以从官网下载最新版本。 第二步:前端设计 设计网页界面,包括拍照和浏览照片两个功能模块。 在网页中引用jQ…

    css 2023年6月11日
    00
  • 基于jQuery实现select下拉选择可输入附源码下载

    为了实现“基于jQuery实现select下拉选择可输入”,需要在HTML页面中增加以下代码结构: <label for="select-input">下拉选择可输入:</label> <select id="select-input" name="select-input&qu…

    css 2023年6月11日
    00
  • css3实现超炫风车特效

    下面是“css3实现超炫风车特效”的完整攻略: 标题 1. 准备工作 在开始实现超炫风车特效之前,我们需要准备以下资源: html文件 css文件 2. 实现步骤 具体实现超炫风车特效的步骤如下: 在html文件中添加一个div元素,并设置一个class属性“windmill”。 <div class="windmill">&…

    css 2023年6月10日
    00
  • 细说CSS中margin属性的使用

    让我为大家讲解一下“细说CSS中margin属性的使用”的攻略。 什么是margin属性 margin属性是CSS中用来设置元素外边距的属性。它决定了元素与相邻元素之间的间隔以及元素与边框之间的间隔。margin也可以用来创建一个元素与其他元素之间的空白区域。 margin属性的使用方法 基本使用 margin属性可以用四个值来定义,分别表示上、右、下、左边…

    css 2023年6月10日
    00
  • javascript动态加载二

    JavaScript动态加载二的完整攻略 在Web开发过程中,JavaScript动态加载是一项非常重要的技术。本文将带你了解JavaScript动态加载的完整攻略,包括如何通过JavaScript动态地加载CSS和JavaScript文件以及如何通过Ajax动态加载数据。 动态加载CSS和JavaScript文件 有时候,我们会希望在页面加载完成之后动态地…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部