首页 > 其他分享 >Vue CLI 系列之(十五)过渡与动画

Vue CLI 系列之(十五)过渡与动画

时间:2024-02-29 19:55:05浏览次数:13  
标签:动画 Vue CLI 样式 元素 leave 0%

过渡与动画

Vue封装的过渡与动画

1. 前置知识

CSS 3 动画【2D转换、3D转换、过渡、动画】

参考网站:https://www.runoob.com/css3/css3-animations.html

<h1 v-show="isShow" id="title">显示了</h1>

<style>	
	h1 {
		/* 通过 animation 把 "donghua"动画捆绑到 h1 元素,时长:1 秒,逆向播放*/
		animation: donghua 1s reverse;
	}
	
	/* 通过 @keyframes 定义一个动画,动画名称为 donghua */
	@keyframes donghua{
		/* 规定变化发生的时间,from和to等同于0%和100% */
		from{
			/* transform:应用转换【2D或3D】,这里是2D转换 */
			/* translateX(-100%):从元素最开始的位置沿着X轴向左平移 100%【如果元素宽度为100px,100%就是100px】的宽度 */
			transform: translateX(-100%);
		}
		to{
			/* translateX(0%):从元素最开始的位置沿着X轴向右平移 0%【如果元素宽度为100px,0%就是0px】的宽度 */
			transform: translateX(0%);
		}
	}
</style>

注:当动画完成时,会变回初始的样式。

关于translateX

https://blog.csdn.net/qq_41588302/article/details/108486955

2. 动画

  1. 准备好样式和动画,样式的名字需要按照规范起名,动画的名字没有要求,可以任意起名。

    /* 使用Vue的动画需要事先准备好动画和两个样式,样式名默认为 v-enter-active和 v-leave-active */
    /* 其中 v是变化的,默认是v开头,如果transition指定了name属性,就要根据name属性的值来,name属性的应用场景是,当一个模板中要为多个元素设置动画时,可通过name属性区分不同元素的动画效果,如果只有一个元素存在动画效果,name属性是可以不写的 */
    .kaka-enter-active {
    	/* 通过 animation 把 "donghua"动画捆绑到 h1 元素,时长:1 秒,逆向播放*/
    	animation: donghua 1s ;
    }
    
    .kaka-leave-active {
    	animation: donghua 1s reverse;
    }
    
    /* 通过 @keyframes 定义一个动画,动画名称为 donghua */
    
    @keyframes donghua{
    
      /* 规定变化发生的时间,from和to等同于0%和100% */
    
      from{
    
        /* transform:应用转换【2D或3D】,这里是2D转换 */
    
        /* translateX(-100%):从元素最开始的位置沿着X轴向左平移 100%【如果元素宽度为100px,100%就是100px】的宽度 */
    
        transform: translateX(-100%);
    
      }
    
      to{
    
        /* translateX(0%):从元素最开始的位置沿着X轴向右平移 0%【如果元素宽度为100px,0%就是0px】的宽度 */
    
        transform: translateX(0%);
    
      }
    
    }
    
  2. 给准备加动画的元素添加transition元素包裹,Vue就会根据v-show/v-if的值为元素添加准备好的样式,实现显示或隐藏之前播放动画。

    <button type="button" @click="isShow = !isShow">显示/隐藏</button>
    

显示了



### 3. 过渡

当v-show/v-if的值为true时,Vue会为元素添加三个类名,分别是v-enter、v-enter-active、v-enter-to;

当v-show/v-if的值为false时,Vue会为元素添加三个类名,分别是v-leave、v-leave-active、v-leave-to;



使用过渡的步骤:

1. 准备好进入的起点样式和终点样式,离开的起点样式和终点样式

如果进入的起点和离开的终点样式相同,可作如下简化,进入的终点和离开的起点样式相同同理

![](https://gitee.com/honourer/picturebed/raw/master/vue/微信截图_20221023170759.png)

2. 配置过渡时间和是否匀速过渡

配置原则:过渡发生在哪个元素上就为哪个元素配置

配置方式一:在过渡效果元素的标签样式中配置

![](https://gitee.com/honourer/picturebed/raw/master/vue/微信截图_20221023170902.png)

配置方式二:配置在v-enter/leave-active【进入的整个过程中激活的样式和离开的整个过程中激活的样式】中

![](https://gitee.com/honourer/picturebed/raw/master/vue/微信截图_20221023171111.png)



在触发过渡效果时,看不到Vue将v-enter/leave类名加到元素上,这是为什么?

答:Vue加上了,不过只存在了一帧,一帧之后,Vue就把该样式去掉了,一瞬间加上了,一瞬间又去掉了



如何处理多个元素有同样的过渡效果这种情况?

1. 第一种方式:用\<transition>标签包裹这多个元素

```vue
<transition name="kaka" appear>
	<div v-show="isShow">
		<h1>显示了</h1>
		<h1>hhh</h1>
	</div>
</transition>

注:这种方式不能实现交叉的过渡效果。

  1. 第二种方式:用<transition-group>标签包裹这多个元素,每个元素设置一个key属性,并保证每个元素的key属性唯一
<transition-group appear>
	<h1 v-show="isShow" key="1">显示了</h1>
	<h1 v-show="isShow" key="2">显示了</h1>
</transition-group>

注:transition-group标签可以实现交叉的过渡效果【transition-group标签内有两个元素,一个元素使用使条件渲染为true时的样式,一个元素使用使条件渲染为false时的样式】

<!-- 交叉的过渡效果 -->
<transition-group appear>
	<h1 v-show="isShow" key="1">显示了</h1>
	<h1 v-show="!isShow" key="2">显示了</h1>
</transition-group>

注:ul-li结构通常也要使用 transition-group

4. 集成第三方动画

在Vue中,可以通过集成成型的第三方样式库或动画库,快速实现炫酷的效果。

4.1. 获取

可以通过以下网址获取第三方样式库或动画库

npm:https://www.npmjs.com/

4.2 使用

以Animate.css为例,介绍第三方库的使用。

  1. 安装

    npm install animate.css

  2. 引入

    import 'animate.css'

    注:import 语句引入样式:import 'xxx.css'

  3. 使用

    <!-- name="animate__animated animate__bounce" 这是固定的 -->
    <!-- enter-active-class:指定进入动画的类名 -->
    <!-- leave-active-class:指定离开动画的类名 -->
    <transition-group 
    	name="animate__animated animate__bounce" 
    	enter-active-class="animate__backInDown" 
    	leave-active-class="animate__backOutUp" 
    	appear
    >
    	<h1 v-show="isShow" key="1">显示了</h1>
    </transition-group>
    

如果Animate.css的动画效果看不到,或者Animate.css的官网提示如下

可能是关闭了“在Windows中显示动画”这一项

参考:https://blog.csdn.net/u014718296/article/details/120681040

5. 总结

  1. 作用:在插入、更新或移除 DOM元素时,在合适的时候给元素添加样式类名。

  2. 图示:

  3. 写法:

    1. 准备好样式:

      • 元素进入的样式:
        1. v-enter:进入的起点
        2. v-enter-active:进入过程中
        3. v-enter-to:进入的终点
      • 元素离开的样式:
        1. v-leave:离开的起点
        2. v-leave-active:离开过程中
        3. v-leave-to:离开的终点
    2. 使用<transition>包裹要过度的元素,并配置name属性:

      <transition name="hello">
      	<h1 v-show="isShow">你好啊!</h1>
      </transition>
      
    3. 备注:若有多个元素需要过度,则需要使用:<transition-group>,且每个元素都要指定key值。

谁需要添加过渡效果和动画效果,transition就包裹在谁上

标签:动画,Vue,CLI,样式,元素,leave,0%
From: https://www.cnblogs.com/wzzzj/p/18040001

相关文章

  • Vue 2x 系列之(十五)过滤器
    过滤器BootCDN:包含了一些免费、优秀的第三方类库官网:https://www.bootcdn.cn/moment.js:js的日期处理类库dayjs:moment.js的轻量化解决方案,API同moment.js完全一致引入dayjs,全局就多了一个dayjs()函数,dayjs()函数默认解析当前时间的时间戳,也可传入时间戳进行解析注:过滤器相对......
  • Vue 2x 系列之(十七)自定义指令
    自定义指令从某种程度上来说,Vue中的自定义指令就是把原生DOM操作进行了一次封装指令是不能脱离元素【标签】存在的定义指令:big使用指令:v-big值的写法:对象【可以处理一些细节上的问题】和函数定义指令可以通过两种方式,函数式和对象式1.函数式指令名(真实DOM元素[element],......
  • Vue 2x 系列之(十六)内置指令
    内置指令我们学过的指令: v-bind :单向绑定解析表达式,可简写为:xxx v-model :双向数据绑定 v-for :遍历数组/对象/字符串 v-on :绑定事件监听,可简写为@ v-if :条件渲染(动态控制节点是否存存在) v-else :条件渲染(动态控制节点是否存存在) v-show :......
  • Vue 2x 系列之(十九)Vue组件化编程
    Vue组件化编程一、对组件的理解什么是组件?组件的定义:​ 实现应用中局部【组件要拆的尽量细致】功能代码【对于前端来说,就是css+html+js】和资源【mp3、mp4、ttf、.zip...】的集合【组件是一个集合】与传统方式编程相比,组件化编程有什么优势?依赖关系不混乱、好维护、代码......
  • Vue 2x 系列之(十八)生命周期
    生命周期[函数]......
  • Vue 2x 系列之(二十)一些注意点
    一些注意点vue基础vue-cli:工程化开发vue-router:在Vue中实现前端路由vuex:应用足够复杂时,用于保管数据element-uivue3Angular==》React==》Vue生命周期函数中的this都是vm开发中自行向vm身上追加属性时【场景:比如methods中要访问mounted钩子中的变量】,避免追加敏感......
  • Vue2.x生命周期函数
    介绍Vue.js2.x中的生命周期函数是一系列钩子函数,它们允许你在Vue实例的不同阶段执行代码。这些生命周期钩子函数允许你在特定的阶段添加自定义逻辑,以便在应用程序生命周期的不同点执行操作。创建阶段1)beforeCreate(创建前):在Vue实例初始化之后,数据观测(dataobs......
  • Vue中组件和插件有什么区别?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助一、组件是什么回顾以前对组件的定义:组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式,在Vue中每一个.vue文件都可以视为一个组件组件的优势降低整个系统的耦合度,在保持接口不变的......
  • Vue学习笔记25--过滤器(日期格式化)
    日期格式化日期格式化插件:https://www.bootcdn.cn/moment.js、day.js(轻量级moment.js)插件用法:双击day.js==>复制链接并访问==》另存为dayjs.min==》项目中引用https://github.com/iamkun/dayjs/blob/dev/docs/zh-cn/README.zh-CN.md过滤器总结:定义:对要显示的数据进行......
  • Vue源码解读:响应式原理
    Vue一大特点就是数据响应式,数据的变化会作用于视图而不用进行DOM操作。原理上来讲,是利用了Object.defifineProperty(),通过定义对象属性setter方法拦截对象属性的变更,从而将属性值的变化转换为视图的变化。在Vue初始化时,会调用initState,它会初始化props,methods,data,......