当前位置: 首页 > news >正文

学习vue3 五,传送,缓存组件以及过渡和过渡列表

目录

Teleport传送组件

keep-alive缓存组件

transition动画组件

 1. 过渡的类名

2. 自定义过渡class名

3. transition的生命周期

4.appear

transition-group

1. 过渡列表

 2. 列表的移动过渡

3. 状态过渡


Teleport传送组件

Teleport Vue 3.0新特性之一。

Teleport 是一种能够将我们的模板渲染至指定DOM节点,不受父级style、v-show等属性影响,但data、prop数据依旧能够共用的技术;类似于 React 的 Portal。

主要解决的问题 因为Teleport节点挂载在其他指定的DOM节点下,完全不受父级style样式影响

用法

<teleport to="body"><A><template #[slotSelect]><p>header slot</p></template><template #footer="{data}">{{data}}</template></A>
</teleport>

使用一个teleport标签包裹,并且使用to属性去跳转到想要的dom元素处,也可以使用class或者id选择器

<div class="card"></div>
<teleport to=".card"><A><template #[slotSelect]><p>header slot</p></template><template #footer="{data}">{{data}}</template></A>
</teleport>

keep-alive缓存组件

有时候我们离开这个组件后,不希望组件被重新渲染,那么就可以使用keep-alive

使用后会增加两个生命周期,onActivated和onDeActivated

onMounted之后执行一次

案例:

<script setup lang="ts">
import A from "./components/A.vue";
import B from "./components/B.vue";
import Card from "./components/Card.vue";
import {shallowRef,ref,reactive,markRaw} from "vue";
const comData = reactive([{name:"A",com: markRaw(A)},{name:"B",com: markRaw(B)},{name:"C",com: markRaw(Card)}
])
const com = shallowRef(comData[0].com)
const active = ref(0)
function changeView(index:number){active.value = indexcom.value = comData[index].com
}
</script><template><div class="container"><divv-for="(item,index) in comData" :key="index":class="{'active':active === index}"@click="changeView(index)">{{item.name}}</div></div><keep-alive :exclude="comData[0].name"><component :is="com"></component></keep-alive>
</template><style scoped>
.container {width: 500px;display: flex;justify-content: center;margin: 0 auto;
}
.container div {margin: 10px;cursor: pointer;width: 100px;height: 30px;line-height: 30px;border: 1px solid grey;text-align: center;
}
.active {background-color: skyblue;color: white;
}
</style>

A,B组件都不会被销毁了,而是进行缓存

这个api有三个props

include:要包含哪些组件

exclude:要排除哪些组件

max:最多有多少组件

B组件内

<script setup lang="ts">
import {onMounted,onActivated,onDeactivated} from "vue";
onMounted(() => {console.log("b组件挂载")
})
onActivated(() => {console.log("b组件激活")
})
onDeactivated(() => {console.log("b组件失活")
})
</script><template><div class="context"><h1>我是b组件</h1><div><span>请输入:</span><input type="text" style="width: 300px;height: 35px"/></div></div>
</template><style scoped>
.context {width: 500px;height: 300px;background-color: #ccc;border: 1px solid grey;margin: 0 auto;
}h1 {text-align: center;
}
</style>

执行截图

transition动画组件

vue提供了transition来封装组件,可以对一个组件提供离开或者进入的过渡,对于以下四个都有作用

  • 条件渲染 (使用 v-if)
  • 条件展示 (使用 v-show)
  • 动态组件
  • 组件根节点

 自定义 transition 过度效果,你需要对transition组件的name属性自定义。并在css中写入对应的样式

 1. 过渡的类名

vue提供了六个类名来完成过渡

v-enter-from:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。

v-enter-active:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。

v-enter-to:定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter-from 被移除),在过渡/动画完成之后移除。

v-leave-from:定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。

v-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。

v-leave-to:离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave-from 被移除),在过渡/动画完成之后移除。

案例:

和缓存组件代码联用

<transition name="fade"><keep-alive :exclude="comData[0].name"><component :is="com"></component></keep-alive>
</transition>
.fade-enter-active, .fade-leave-active {transition: all 0.5s ease;
}
.fade-enter-from, .fade-leave-to {width: 0px;height: 0px;
}
.fade-enter-to, .fade-leave-from {width: 500px;height: 500px;
}

2. 自定义过渡class名

  • enter-from-class
  • enter-active-class
  • enter-to-class
  • leave-from-class
  • leave-active-class
  • leave-to-class

在这些props后接要自定义的名字即可换成自己想要的,相当于起别名

也可以指定过渡时间

<transition :duration="1000">...</transition>
 可以分别指定,离开和进入的时间 
<transition :duration="{ enter: 500, leave: 800 }">...</transition> 

自定义class只要是可以和css的动画库进行连用

案例:我们以animate.css为例

安装:npm install animate.css -S

引入:在main.ts中 import "animate.css"

 <transitionenter-active-class="animate__animated animate__fadeInLeft"leave-active-class="animate__animated animate__fadeOutLeft"><keep-alive :exclude="comData[0].name"><component :is="com"></component></keep-alive></transition>

3. transition的生命周期

对于transition vue设计了八个生命周期函数,用于使用js来执行一些操作

  @before-enter="beforeEnter" //对应enter-from@enter="enter"//对应enter-active@after-enter="afterEnter"//对应enter-to@enter-cancelled="enterCancelled"//显示过度打断@before-leave="beforeLeave"//对应leave-from@leave="leave"//对应enter-active@after-leave="afterLeave"//对应leave-to@leave-cancelled="leaveCancelled"//离开过度打断

他们都会传入一个参数el:Element

enter和leave会多一个参数,done也就是一个回调,当过渡执行完毕时,会自动调用

4.appear

通过这个属性可以设置初始节点过度 就是页面加载完成就开始动画 对应三个状态

 <transition
    appear

  1. appear-active-class=""

  2. appear-from-class=""

  3. appear-to-class=""

>
    <keep-alive :exclude="comData[0].name">
      <component :is="com"></component>
    </keep-alive>
  </transition>

transition-group

1. 过渡列表

同时渲染整个列表,我们会使用transition-group.组件 

  • 默认情况下,它不会渲染一个包裹元素,但是你可以通过 tag attribute 指定渲染一个元素。
  • (也就是说不使用tag那么就是分散的元素节点没有生成一个父节点包裹)
  • 过渡模式不可用,因为我们不再相互切换特有的元素。
  • 内部元素总是需要提供唯一的 key attribute 值。
  • CSS 过渡的类将会应用在内部的元素中,而不是这个组/容器本身。

案例:

<script setup lang="ts">
import {reactive} from "vue";
const list = reactive([1,2,3,4,5])
function add() {list.push(list.length + 1)
}
function pop() {list.pop()
}
</script><template><div><div class="anniu"><button @click="add">add</button><button @click="pop">pop</button></div><transition-groupenter-active-class="animate__animated animate__backInDown"leave-active-class="animate__animated animate__backOutDown"tag="div" class="context"><divclass="showList"v-for="(item,index) in list" :key="index">{{item}}</div></transition-group></div>
</template><style scoped>
.anniu {width: 200px;margin: 0 auto;
}
.anniu button {width: 80px;height: 35px;margin-left: 10px;
}
.context {width: 500px;height: 500px;margin: 20px auto;display: flex;flex-wrap: wrap;justify-content: center;border: 1px solid grey;
}
.showList {width: 25px;height: 25px;border: 1px solid grey;text-align: center;margin-top: 5px;
}
</style>

 2. 列表的移动过渡

<transition-group> 组件还有一个特殊之处。除了进入和离开,它还可以为定位的改变添加动画。只需了解新增的 v-move 类就可以使用这个新功能,它会应用在元素改变定位的过程中。像之前的类名一样,它的前缀可以通过 name attribute 来自定义,也可以通过 move-class attribute 手动设置

案例:

<script setup lang="ts">
import {ref} from "vue";
import _ from "lodash"let data = ref(Array.apply(null,{length: 81} as number[]).map((_,index)=> {return {id: index,value: (index % 9) + 1}
}))
function change () {data.value = _.shuffle(data.value)
}
</script><template><div><button @click="change">random</button><transition-group tag="div" name="mmm" class="context"><div v-for="item in data" :key="item.id">{{item.value}}</div></transition-group></div>
</template><style scoped>
.context {display: flex;width: calc(10 * 25px);flex-wrap: wrap;
}
button{width: 100px;height: 35px;font-size: 19px;margin-bottom: 30px;
}
.context div {width: 25px;height: 25px;text-align: center;border: 1px solid grey;
}
.mmm-move {transition: all 1s ease;
}
</style>
map() 的返回值是一个新的数组,新数组中的元素为 “原数组调用函数处理过后的值”

3. 状态过渡

vue也可以给数字颜色等添加过渡

<template><div><input step="20" v-model="num.current" type="number" /><div>{{ num.tweenedNumber.toFixed(0) }}</div></div>
</template><script setup lang='ts'>
import { reactive, watch } from 'vue'
import gsap from 'gsap'
const num = reactive({tweenedNumber: 0,current:0
})watch(()=>num.current, (newVal) => {gsap.to(num, {duration: 1,tweenedNumber: newVal})
})</script><style>
</style>

相关文章:

学习vue3 五,传送,缓存组件以及过渡和过渡列表

目录 Teleport传送组件 keep-alive缓存组件 transition动画组件 1. 过渡的类名 2. 自定义过渡class名 3. transition的生命周期 4.appear transition-group 1. 过渡列表 2. 列表的移动过渡 3. 状态过渡 Teleport传送组件 Teleport Vue 3.0新特性之一。 Teleport 是一…...

MyBatis快速学习

目录 前言 MyBatis的具体使用 一些小工具&#xff1a;MyBatisX 常见问题&#xff1a; 1.表中字段名和实体属性名不一致 2.按条件查询&#xff08;单条件&#xff09;时的&#xff0c;查询条件怎么编写 3.按条件查询&#xff08;多条件&#xff09; 4.多条件查询时&…...

24.8.3数据结构|双向循环链表、静态链表

双向循环链表 节点类型与双链表的节点类型完全相同双向循环链表的操作也与双链表的操作基本一致。 例题 将自然数一到N按由小到大的顺序沿顺时针方向围成一个圈&#xff0c;然后以一为起点先沿顺时针方向数到第N个数将其划去&#xff0c;再沿逆时针方向数到第K个数将其滑去&a…...

C语言典型例题28

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题2.5 输入一个华氏温度&#xff0c;要求输出摄氏温度。公式为C5/9(F-32)&#xff0c;要求输出要有文字说明&#xff0c;取两位小数 数学知识&#xff1a; &#xff08;1&#xff09;华氏温度与摄氏温度&#x…...

PHP企业培训考试系统小程序源码

&#x1f680;企业培训考试系统&#xff0c;赋能员工成长新引擎&#x1f4da; &#x1f331; 开篇&#xff1a;解锁企业培训新篇章 在快速变化的商业环境中&#xff0c;员工的能力提升是企业持续发展的关键。&#x1f680; 传统的培训方式已难以满足现代企业的需求&#xff0…...

进程状态(三)----- linux 中具体的进程状态(下)

目录 前言1. T && t 状态2. X 与 Z 状态3. 孤儿进程 前言 继上一篇文章 进程状态&#xff08;二&#xff09;----- linux 中具体的进程状态&#xff08;上&#xff09; 介绍了 linux 系统中具体的 R、S、D 状态&#xff0c;而这篇文章继续介绍 linux 系统中剩下的三种…...

关系型数据库(RDBMS,Relational Database Management System)

关系型数据库&#xff08;RDBMS&#xff0c;Relational Database Management System&#xff09;是一种结构化数据存储系统&#xff0c;它使用表&#xff08;Tables&#xff09;、行&#xff08;Rows&#xff09;和列&#xff08;Columns&#xff09;的结构来组织和管理数据。关…...

使用RK Docker环境编译RK SDK

文章目录 前言Docker介绍实验环境获取RK Docker镜像加载RK Docker镜像使用RK Docker环境编译SDK其它 前言 作为一名嵌入式Linux的学习者&#xff0c;目前编译各种平台&#xff0c;用的都是同一个编译机&#xff08;Ubuntu虚拟机&#xff09;。之前一直在折腾全志&#xff0c;所…...

免费【2024】springboot 付费自习室管理系统的设计与实现

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…...

【学习方法】高效学习因素 ② ( 学习动机 | 内在学习动机 | 外在学习动机 | 外在学习动机的调整方向 | 保护学习兴趣 | 高考竞争分析 )

文章目录 一、高效学习的其它因素 - 学习动机1、学习动机2、内在学习动机3、外在学习动机4、外在学习动机的问题所在5、外在学习动机的调整方向6、保护学习兴趣7、高考竞争分析 上一篇博客 【学习方法】高效学习因素 ① ( 开始学习 | 高效学习因素五大因素 | 高效学习公式 - 学…...

【学习笔记】A2X通信的协议(四)- A2X PC5通信(二)

目录 6.1.2.4 A2X PC5单播链接释放程序 6.1.2.4.1 概述 6.1.2.4.2 发起UE启动A2X PC5单播链接释放程序 6.1.2.4.3 目标UE接受的A2X PC5单播链接释放程序 6.1.2.4.4 发起UE完成的A2X PC5单播链接释放程序 6.1.2.4.5 异常情况 6.1.2.4.5.1 发起UE的异常情况 6.1.2.5 A2X …...

注意!!可能这是《网络管理员》旧教程最后一次考试,赶紧学起来

网络管理员是软考初级资格热门科目之一。近日在国家版本数据中心&#xff0c;小编查到网络管理员官方教程已经有2024最新版出来了&#xff0c;现在这一版教程说实话有些内容已经过时了&#xff0c;尤其新版教材也已经出现&#xff0c;小编推测明年大概率依据新版考试大纲出题&a…...

array postgre gsql 剔除

进行某种过滤或比较操作&#xff0c;判断不匹配的&#xff0c;数组 array 中列出的所有字符串 and a.Repunittree not like all (array[‘%0001003549950003%’,‘%000100460041%’,‘%000100460047%’,‘%000105880001%’ ,‘%000100020007%’,‘%000105830009%’,‘%0001058…...

【Matlab】零阶保持法:连续状态空间方程(含噪声,非线性)离散化处理方法

常用的离散化方法&#xff1a;零阶保持器&#xff08;zero-order hold&#xff0c;ZOH&#xff09;、欧拉法&#xff08;Euler&#xff09;、一阶保持器&#xff08;First-order hold&#xff0c;FOH&#xff09;。最常用的是前两种。 0.零阶保持器&#xff08;ZOH&#xff09…...

web自动化6-pytest⑦一些基本情况

命名规则 1)import pytest 测试文件名要以test_ 开头或 _test结尾 2&#xff09;类名需要以Test开头&#xff08;T&#xff09;&#xff0c;不能带有init方法 3&#xff09;函数名以test_开头&#xff08;t&#xff09; 符合规则框架才能找到用例&#xff0c;一条用例代表一条函…...

apache 漏洞

影响版本 Apache HTTP Server 2.4.49 某些Apache HTTPd 2.4.50也存在此漏洞 环境搭建 docker pull blueteamsteve/cve-2021-41773:no-cgid 漏洞复现 http://1.15.136.212:8080 1.使⽤poc curl http://1.15.136.212:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd...

简单的docker学习 第11章 镜像中心

第11章 镜像中心 Docker Hub 与阿里云都是 Docker 的公网镜像中心&#xff0c;用户可以将自己的镜像 push 到公网镜像中心中自己的镜像仓库&#xff0c;并可将仓库设置为私有库&#xff0c;使他人无法看到&#xff0c;更无法 pull&#xff0c;以保证镜像的安全性。不过&#x…...

PostgreSQL 15 使用物理复制槽 实现主从

一、系统环境 IP操作系统用途192.168.140.153CentOS 7.9.2009pg-主节点192.168.140.159CentOS 7.9.2009pg-从节点 二、单节点安装 2.1 主节点安装 参考前一篇文章 2.2 从节点安装 只需要先将rpm包安装即可&#xff0c;无需初始化数据库&#xff0c;无需启动服务。 三、主从…...

C# 中引用类型的探讨

引用类型的变量不直接包含其数据&#xff1b;它包含对其数据的引用。 如果按值传递引用类型参数&#xff0c;则可能更改属于所引 用对象的数据&#xff0c;例如类成员的值。 但是&#xff0c;不能更改引用本身的值&#xff1b;例如&#xff0c;不能使用相同引用为新对象分配内存…...

技术分享| 前端性能优化——虚拟滚动(Virtual Scroll)

前端遇到大量数据&#xff08;尤其是大数据表&#xff09;的DOM 渲染时&#xff0c;通常会卡顿&#xff0c;需要考虑优化性能问题&#xff0c;这里针对DOM 渲染引出“虚拟滚动”方案&#xff0c; 详细请在以下各文章中详细了解&#xff1a; vue插件 vue-virtual-scroll-list解决…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...