【Vue3】transition 组件

news2024/11/26 5:54:31

1. 基础用法

<template>
  <div class="content">
    <button @click="flag = !flag">switch</button>
    <transition name="fade">
      <div v-if="flag" class="box"></div>
    </transition>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
const flag = ref<boolean>(true);
</script>

<style scoped>
.box {
  height: 200px;
  width: 200px;
  background-color: red;
}

.fade-enter-from {
  height: 0;
  width: 0;
}

.fade-enter-active {
  transition: all 1.5s ease;
}


.fade-enter-to {
  height: 200px;
  width: 200px;
}

.fade-leave-from {
  width: 200px;
  height: 200px;
  /* 花里胡哨的旋转 */
  transform: rotate(360deg);
}

.fade-leave-active {
  transition: all 2.5s ease;
}

.fade-leave-to {
  width: 0;
  height: 0;
}

</style>

在这里插入图片描述

2. 自定义过渡类名

<template>
  <div class="content">
    <button @click="flag = !flag">switch</button>
    <transition enter-to-class="e-to" enter-active-class="e-active" enter-from-class="e-from" name="fade">
      <div v-if="flag" class="box"></div>
    </transition>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
const flag = ref<boolean>(true);
</script>

<style scoped>
.box {
  height: 200px;
  width: 200px;
  background-color: red;
}

.e-from {
  height: 0;
  width: 0;
}

.e-active {
  transition: all 1.5s ease;
}


.e-to {
  height: 200px;
  width: 200px;
}

.fade-leave-from {
  width: 200px;
  height: 200px;
  /* 花里胡哨的旋转 */
  transform: rotate(360deg);
}

.fade-leave-active {
  transition: all 2.5s ease;
}

.fade-leave-to {
  width: 0;
  height: 0;
}

</style>

和基础用法中的效果一样。

与基础用法中的区别在于,自定义过渡类名可以结合第三方的库去使用。

比如结合 animate.css

<template>
  <div class="content">
    <button @click="flag = !flag">switch</button>
    <transition :duration="{enter:200, leave
    :3000}" leave-active-class="animate__animated animate__bounceOut" enter-active-class="animate__animated animate__bounceIn">
      <div v-if="flag" class="box"></div>
    </transition>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import 'animate.css';
const flag = ref<boolean>(true);
</script>

<style scoped>
.box {
  height: 200px;
  width: 200px;
  background-color: red;
}
</style>

其中,:duration="200" 也可以表示 enterleave 的时间都是 200ms

3. 八个生命周期

显示 enter 状态:

<template>
  <div class="content">
    <button @click="flag = !flag">switch</button>
    <transition @before-enter="EnterFrom" @enter="EnterActive" @after-enter="EnterTo" @enter-cancelled="EnterCancel">
      <div v-if="flag" class="box"></div>
    </transition>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import 'animate.css';
const flag = ref<boolean>(true);

const EnterFrom = (el: Element) => {
  console.log('进入之前');
}
const EnterActive = (el: Element, done: Function) => {
  console.log('进入中(过渡曲线)');
  setTimeout(() => {
    done()
  }, 3000)
}
const EnterTo = (el: Element) => {
  console.log('进入之后(过渡完成)');
}
const EnterCancel = () => {
  // 过渡没到三秒切换,即为过渡效果被打断
  console.log('进入取消(过渡效果被打断)');
}
</script>

<style scoped>
.box {
  height: 200px;
  width: 200px;
  background-color: red;
}
</style>

在这里插入图片描述
隐藏 leave 状态:

<template>
  <div class="content">
    <button @click="flag = !flag">switch</button>
    <transition 
    @before-enter="EnterFrom" 
    @enter="EnterActive" 
    @after-enter="EnterTo" 
    @enter-cancelled="EnterCancel"
    @before-leave="LeaveFrom" 
    @leave="LeaveActive" 
    @after-leave="LeaveTo" 
    @leave-cancelled="LeaveCancel"
    
    >
      <div v-if="flag" class="box"></div>
    </transition>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import 'animate.css';
const flag = ref<boolean>(true);

const EnterFrom = (el: Element) => {
  console.log('进入之前');
}
const EnterActive = (el: Element, done: Function) => {
  console.log('进入中(过渡曲线)');
  setTimeout(() => {
    done()
  }, 3000)
}
const EnterTo = (el: Element) => {
  console.log('进入之后(过渡完成)');
}
const EnterCancel = () => {
  // 过渡没到三秒切换,即为过渡效果被打断
  console.log('进入取消(过渡效果被打断)');
}
const LeaveFrom = (el: Element) => {
  console.log('离开之前');
}
const LeaveActive = (el: Element, done: Function) => {
  console.log('离开中(过渡曲线)');
}
const LeaveTo = (el: Element) => {
  console.log('离开之后(过渡完成)');
}
const LeaveCancel = () => {
  console.log('离开取消(过渡效果被打断)');
}
</script>

<style scoped>
.box {
  height: 200px;
  width: 200px;
  background-color: red;
}
</style>

在这里插入图片描述
声明周期结合第三方库 gsap 去使用。

<template>
  <div class="content">
    <button @click="flag = !flag">switch</button>
    <transition 
    @before-enter="EnterFrom" 
    @enter="EnterActive" 
    @leave="LeaveActive" 
    >
      <div v-if="flag" class="box"></div>
    </transition>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import gsap from 'gsap'
const flag = ref<boolean>(true);

const EnterFrom = (el: Element) => {
  gsap.set(el, {
    width:0,
    height:0
  })
}
const EnterActive = (el: Element, done: gsap.Callback) => {
  gsap.to(el, {
    width: 200,
    height: 200,
    onComplete: done
  })
}
const LeaveActive = (el: Element, done: gsap.Callback) => {
  gsap.to(el, {
    width: 0,
    height: 0,
    onComplete: done
  })
}
</script>

<style scoped>
.box {
  height: 200px;
  width: 200px;
  background-color: red;
}
</style>

4. appear

只是在页面刚刚加载的时候进行,也可以结合第三方库去使用。

<template>
  <div class="content">
    <button @click="flag = !flag">switch</button>
    <transition 
    appear
    appear-from-class="from"
    appear-active-class="active"
    appear-to-class="to"
    >
      <div v-if="flag" class="box"></div>
    </transition>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import gsap from 'gsap'
const flag = ref<boolean>(true);

</script>

<style scoped>
.box {
  height: 200px;
  width: 200px;
  background-color: red;
}
.from {
  width: 0;
  height: 0;
}
.active {
  transition: all 2s ease;
}
.to {
  width: 200px;
  height: 200px;

}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/941085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

javacv基础04-图像色彩空间转换函数Imgproc.cvtColor()(彩图转灰度图示例)

opencv python 实现方式参考 opencv-19 图像色彩空间转换函数cv2.cvtColor() javacv 中的函数 Imgproc.cvtColor(image, grey, Imgproc.COLOR_BGR2GRAY); 参数说明&#xff1a; image: 原始图像新灰度图转换参数&#xff1a;多种转换方式参考上面链接地址内容 javacv 实现方式…

K8s的Pod出现Init:ImagePullBackOff问题的解决(以calico为例)

对于这类问题的解决思路应该都差不多&#xff0c;本文以calico插件安装为例&#xff0c;发现有个Pod的镜像没有pull成功 第一步&#xff1a;查看这个pod的描述信息 kubectl describe pod calico-node-wmhrw -n kube-system 从上图发现是docker拉取"calico/cni:v3.15.1&q…

鸿蒙是一个怎么样的操作系统,真的是安卓套壳吗?

从鸿蒙项目正式推出以来&#xff0c;就一直有各自声音&#xff0c;有看好的&#xff0c;认为鸿蒙的出现将会成为一个智能终端设备操作系统的框架和平台&#xff0c;促进万物互联产业的繁荣发展&#xff1b;也有的人在唱衰&#xff0c;觉得鸿蒙发展不起来&#xff0c;甚至认为鸿…

rknn_toolkit以及rknpu环境搭建-rv1126

rknn_toolkit安装------------------------------------------------------------------------------- 环境要求&#xff1a;ubutu18.04 建议使用docker镜像 安装docker 参考https://zhuanlan.zhihu.com/p/143156163 镜像地址 百度企业网盘-企业云盘-企业云存储解决方案-同…

http请求方式过滤器与拦截器的区别

get:获取查询数据(查询)post:数据的提交&#xff0c;新增操作(增加)put:向服务端发送数据、改变信息&#xff0c;侧重点在于对数据的修改操作delete:数据库数据的删除head:一般用来判断类型、根据返回状态确定资源是否存在、资源是否更新以及更新的时间等 过滤器与拦截器的区别…

URI和URL和URN区别

URI、URL 和 URN 是一系列从不同角度来看待资源标识和定位的概念。虽然它们有一些重叠&#xff0c;但每个概念都强调了不同的方面。 URI&#xff08;Uniform Resource Identifier&#xff09;&#xff1a;URI 是一个通用的术语&#xff0c;用于标识和定位资源。它是一个抽象的概…

Sui流动性质押黑客松|本周Workshop预告

Sui流动性质押黑客松正在如火如荼的报名中&#xff0c;Sui基金会现诚邀全球开发者前来参与&#xff0c;助力资产再流通。了解黑客松详情&#xff1a;Sui流动性质押黑客松开启报名&#xff0c;赢取千万美金质押和奖励&#xff01; 黑客松官方网站&#xff1a;Sui Liquid Stakin…

若依cloud -【 47 ~ 】

47 服务监控介绍 什么是服务监控 监视当前系统应用状态、内存、线程、堆栈、日志等等相关信息&#xff0c;主要目的在服务出现问题或者快要出现问题时能够准确快速地发现以减小影响范围。 为什么要使用服务监控 服务监控在微服务改造过程中的重要性不言而喻&#xff0c;没有强…

Linux操作系统--shell编程(正则表达式)

1..正则表达式概述 正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在 Linux 中,grep,sed,awk 等文本处理工具都支持通过正则表达式进行模式匹配。 2.常规的匹配操作 3.…

电源防反接电路设计

NMOS防反接&#xff1a; PMOS防反接 在实际应用中&#xff0c;G极一般串联一个电阻&#xff0c;防止MOS管被击穿&#xff0c;也可以加上稳压二极管&#xff0c;并联在分压电阻上的电容&#xff0c;有一个软启动的作用。在电流开始流过的瞬间&#xff0c;电容充电&#xff0c;G极…

一键快速还原修复人脸,CodeFormer 助力人脸图像修复

今天在查资料的时候无意间看到了一个很有意思的工具&#xff0c;就是CodeFormer &#xff0c;作者给出来的说明是用于人脸修复任务的&#xff0c;觉得很有意思就拿来实践了一下&#xff0c;这里记录分享一下。 首先对人脸修复任务进行简单的回顾总结&#xff1a; 人脸修复是指…

thinkphp6 入门(3)--获取GET、POST请求的参数值

一、Request对象 thinkphp提供了Request对象&#xff0c;其可以 支持对全局输入变量的检测、获取和安全过滤 支持获取包括$_GET、$_POST、$_REQUEST、$_SERVER、$_SESSION、$_COOKIE、$_ENV等系统变量&#xff0c;以及文件上传信息 具体参考&#xff1a;https://www.kanclou…

功率放大器选购注意什么问题

功率放大器是将输入信号放大到较高功率输出的重要设备。在选择功率放大器时&#xff0c;需要考虑多个因素&#xff0c;以确保所购买的设备能够满足实际需求。下面西安安泰将介绍一些功率放大器的关键问题和注意事项&#xff0c;帮助大家在功率放大器选购过程中做出明智的决策。…

CentOs下面安装jenkins记录

目录 一、安装jenkins 二、进入jenkins 三、安装和Gitee&#xff0c;Maven等插件 一、安装jenkins 1 wget -O /etc/yum.repos.d/jenkins.repo \ https://pkg.jenkins.io/redhat-stable/jenkins.repo 2 rpm --import https://pkg.jenkins.io/redhat-stable/…

接口测试json入参,不同类型参数格式书写

接口json入参&#xff0c;不同类型参数格式 1、String 入参&#xff1a;A&#xff08;String&#xff09;&#xff0c;B&#xff08;String&#xff09; 格式&#xff1a;{"A":"值a","B":"值b"} 示例&#xff1a; 接口测试入参这么…

多个版本python本地调用解决方案

当本机既装了2点几的python又装的3点几的python的时候&#xff0c;在环境变量里面&#xff0c;哪一个的路径在path里面配置的考前&#xff0c;哪个就会被识别到。 如果想使用3点几的python怎么搞呢&#xff1f; 输入指令 where python&#xff0c; 找到你要的python路径&#…

基于Ubuntu坏境下的Suricata坏境搭建

目录 Suricata环境安装 第一步、在 Ubuntu 端点安装 Suricata 1、加入Suricata源 2、更新安装包 3、下载SuricataSuricata 第二步、下载并提取新兴威胁 Suricata 规则集 1、在tmp文件夹下载 Suricata 规则集 如果发现未安装curl&#xff0c;使用apt安装即可&#xff1a;…

【数据结构】详解环形队列

文章目录 &#x1f30f;引言&#x1f340;[循环队列](https://leetcode.cn/problems/design-circular-queue/description/)&#x1f431;‍&#x1f464;题目描述&#x1f431;‍&#x1f453;示例&#xff1a;&#x1f431;‍&#x1f409;提示&#x1f431;‍&#x1f3cd;思…

图像特征描述和人脸识别

CV_tutorial2 特征检测使用HOG实现行人检测Harris角点检测关键特征检测SIFT纹理特征 LBP算法 模板匹配人脸识别 特征检测 使用HOG实现行人检测 HOG方向梯度直方图 实现过程&#xff1a; 灰度化&#xff08;为了去掉颜色、光照对形状的影响&#xff09;;采用Gamma校正法对输…

拉美市场,跨境电商的最后一片蓝海市场?真的值得入场吗?

拉美&#xff0c;是跨境卖家公认的蓝海市场&#xff0c;甚至经常被称为“跨境电商的最后一片蓝海市场”。那么拉美市场的前景究竟如何&#xff1f;现在真的是跨境卖家入场的最佳时机吗&#xff1f;接下来就一起来看一看吧&#xff01; 拉美市场基本概况 1、消费潜力大&#x…