【day 09】vue的过渡与动画

news/2024/10/20 5:34:39/

Vue 的过渡与动画

基础的过渡 案例

 <!-- 第一步 包一个transition标签 --><transition><Song id="song" v-if="bool"></Song></transition>
/*
希望组件节点  离开的时候  有过渡效果离开的起点
离开的终点*/.v-leave{/* 离开的起点 */transform: translate(0,0);
}/* 加上  过渡css属性 */
.v-leave-active{/* 触发了离开状态   一般是给transition过渡只要触发了leave  就会在这里  加上  transition过渡 leave结束了  把transition过渡移除*/transition:transform 1s;
}.v-leave-to{/* 离开的终点 */transform: translate(100%,0);
}/* 进入时  添加  过渡效果 */
/* 元素将会  从右到左出现 */
.v-enter{/* 进入的终点 */transform:translate(100%,0)
}.v-enter-active{transition:transform 1s;
}
.v-enter-to{/* 进入的终点 */transform:translate(0,0)
}

由于进入和离开 起点终点 是逆向的 写成多元素 选择器

/*
希望组件节点  离开的时候  有过渡效果离开的起点
离开的终点*/.v-leave,.v-enter-to{/* 离开的起点 */transform: translate(0,0);
}/* 加上  过渡css属性 */
.v-leave-active,.v-enter-active{/* 触发了离开状态   一般是给transition过渡只要触发了leave  就会在这里  加上  transition过渡 leave结束了  把transition过渡移除*/transition:transform 1s;
}.v-leave-to,.v-enter{/* 离开的终点 */transform: translate(100%,0);
}

当组件中有多个需要过渡的元素 且css不同

<!-- 第一步 包一个transition标签 --><transition>  //应用上 v-enter的样式  默认 v-<Song id="song" v-if="bool"></Song></transition><!-- singer-enter  把v替换成  name值 --><transition name="singer"><Singer id="singer" v-if="bool"></Singer></transition><button @click="bool = !bool">切换bool值</button>
.v-leave,.v-enter-to{transform: translate(0,0);
}.v-leave-active,.v-enter-active{transition:transform 1s;
}.v-leave-to,.v-enter{transform: translate(100%,0);
}.singer-leave,.singer-enter-to{transform: translate(0,0);
}.singer-leave-active,.singer-enter-active{transition:transform 1s;
}.singer-leave-to,.singer-enter{transform: translate(0,-400px);
}

App.vue

<template><div id="app"><!-- 第一步 包一个transition标签 --><transition><Song id="song" v-if="bool"></Song></transition><transition name="singer"><Singer id="singer" v-if="bool"></Singer></transition><button @click="bool = !bool">切换bool值</button></div>
</template><script>
import Song from "./components/Song";
import Singer from "./components/Singer";
export default{name:"App",components:{Song,Singer,},data(){return{bool:true}},}</script><style>
#song{/* float:left;  */width:100%;background-color: yellow;}
#singer{float:left;width: 200px;background-color: skyblue;
}
.v-leave,.v-enter-to{transform: translate(0,0);
}.v-leave-active,.v-enter-active{transition:transform 1s;
}
.v-leave-to,.v-enter{transform: translate(100%,0);
}
.singer-leave,.singer-enter-to{transform: translate(0,0);
}.singer-leave-active,.singer-enter-active{transition:transform 1s;
}.singer-leave-to,.singer-enter{transform: translate(0,-400px);
}</style>

appear 属性

默认情况下 bool 为true时 song一刷新没有进入动画 加上appear属性即可

   <transition appear><Song id="song" v-if="bool"></Song></transition><transition appear name="singer"><Singer id="singer" v-if="bool"  ></Singer></transition>

dom 一刷新就会 有进入动画

transition-group

如果 多个元素需要 具有独立的过渡 切换

用上 transition-group<ul><transition-group appear><li v-for="(item, index) in arr" :key="index" @click="fn(index)">{{ item.name }} ++++ {{ item.id }}</li></transition-group></ul>注意事项 : 要具有 过渡效果的li 必须要具备 key值 // 通过 操作 dom依赖的数据  实现 dom的消失  删除arr数组项 li就会触发 过渡效果
// 手动修改 display 不会触发过渡 (display none没有过渡效果) 删除节点也不会触发过渡效果 
data() {return {bool: true,arr: [{ id: 1000, name: "zhuque" },{ id: 1001, name: "zhuque" },{ id: 1002, name: "zhuque" },{ id: 1003, name: "zhuque" },{ id: 1004, name: "zhuque" },],};},methods: {fn(index) {this.arr.splice(index, 1);},}, 

App.vue

<template><div id="app"><!-- 第一步 包一个transition标签  --><!-- <transition appear><Song id="song" v-if="bool"></Song></transition><transition name="singer" appear><Singer id="singer" v-if="bool"></Singer></transition> --><ul><transition-group appear><li v-for="(item, index) in arr" :key="index" @click="fn(index)">id: {{ item.id }}  ---- name: {{ item.name }} </li></transition-group></ul><button @click="bool = !bool">切换bool值</button></div>
</template><script>
import Song from "./components/Song";
import Singer from "./components/Singer";export default {name: "App",components: {Song,Singer,},data() {return {bool: true,arr: [{ id: 1000, name: "zz" },{ id: 1001, name: "xx" },{ id: 1002, name: "cc" },{ id: 1003, name: "vv" },{ id: 1004, name: "bb" },],};},methods: {fn(index) {this.arr.splice(index, 1);},},
};
</script>
<style>
#song {background-color: yellow;
}
#singer {background-color: skyblue;
}
li {height: 40px;background-color: pink;border-bottom: 1px solid #000;
}
.v-leave,
.v-enter-to {transform: translate(0, 0);
}.v-leave-active,
.v-enter-active {transition: transform, 1s;
}
.v-leave-to,
.v-enter {transform: translate(100%, 0);
}.singer-leave-to,
.singer-enter {transform: translate(0, -325px);
}.singer-leave,
.singer-enter-to {transform: translate(0, 0);
}.singer-leave-active,
.singer-enter-active {transition: transform, 1s;
}
</style>

http://www.ppmy.cn/news/87940.html

相关文章

Maven概念及搭建

1.为什么我们要学习 maven? maven 还未出世的时候&#xff0c;我们有很多痛苦的经历 。 痛点 1&#xff1a; jar 包难以寻找 痛点 2&#xff1a; jar 包依赖的问题 痛点 3&#xff1a; jar 不方便管理 痛点 4&#xff1a;项目编译 2.Maven 简介 Maven 是 Apache 软件基金…

SpringBoot统一功能处理的三个常见实例

我们的统一功能处理肯定是通过Spring拦截器处理的撒 Spring拦截器 截器的实现分为以下两个步骤&#xff1a; 1. 创建⾃定义拦截器&#xff0c;实现 HandlerInterceptor 接⼝的 preHandle&#xff08;执⾏具体⽅法之前的预处理&#xff09;⽅ 法。 2. 将⾃定义拦截器加⼊ W…

[算法前沿]--017-中文大模型ChatGLM微调:P-Tuning,deepspeed,LoRA<中>

文章目录 1. ChatGLM模型介绍2. 基于 P-Tuningv2的高效参数微调方法2.1 环境配置2.3 P-TuningV2 教程2.3.1 训练2.3.1.1 P-Tuning v22.3.1.2 Finetune2.3.1.3 LoRA2.3.2 推理2.3.2.1 示例12.3.2.2 示例22.3.3 评估结果1. ChatGLM模型介绍 ChatGLM-6B 是一个开源的、支持中英双语…

【历史上的今天】5 月 26 日:美国首个计算机软件程序专利;苹果市值首次超越微软;Wiki 的发明者出生

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 5 月 26 日&#xff0c;在 1995 年的今天&#xff0c;微软公司首席执行官比尔盖茨发表了一番讲话&#xff0c;他认为自己的公司在估计互联网的影响和普及方面错…

windows 环境jar包设置自启动

在Windows操作系统中&#xff0c;可以通过创建一个批处理文件并将其添加到Windows服务中来设置Spring Boot JAR包的开机自启动。具体步骤如下&#xff1a; 创建一个名为spring-boot-app.bat的批处理文件&#xff0c;并在其中指定启动Spring Boot应用程序的命令&#xff0c;如下…

【C++进阶之路】内存管理

文章目录 一.内存管理1. 内存布局2. C的内存管理 ①内置类型② 自定义类型 3. operate new 与 operate delete ① 解读operate new源代码② 解读operate delete源代码 4. new和delete的基本原理①new对类对象②delete对类对象 拓展—— 深入理解delete[]和new[]对比 C和C内存…

Mysql数据库备份 一天一次 保存最新五天 每天凌晨三点备份

Mysql数据库备份 一天一次 保存最新五天 每天凌晨一点三十备份 步骤一 先查看 sudo systemctl status crond 是否存在 不存在执行下面代码 sudo yum install cronie sudo systemctl start crond sudo systemctl enable crond sudo systemctl status crond 步骤二 Cd /home …

SpringBoot与RedisCacheManager整合

本文根据众多互联网博客内容整理后形成&#xff0c;引用内容的版权归原始作者所有&#xff0c;仅限于学习研究使用 SpringBoot 缓存管理器CacheManager 从3.1开始Spring定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技…