6.6Vue中的动画特效

1.Vue中的CSS动画(包括keyframes形式的动画,transition过渡动画)

动画原理

上图是隐藏变为显示:enter原理过程
例如:一开始,enter为0(需要在css样式自己写这个类,并赋值opacity(透明度)为0)(opacity为0,隐藏),下一帧,enter销毁变为enter-to(opacity为1,显示),enter-active贯穿整个过程,监测是否变化。

显示变为隐藏:leave
不同的是,一开始leave为1,下一帧,leave销毁变为leave-to(opacity为0,隐藏)(需要自己写css样式并赋值)

	<style>
		.sh-enter,.sh-leave-to{
			opacity: 0;
		}
		.sh-enter-active,.sh-leave-active{
			transition: opacity 1s;
		}
	</style>
	
<body>
	<div id="root">
		<transition name="sh"><!--这里的name决定的css样式的名字,如果没有,则默认为v-enter/leave-->
			<div v-show="show">hello world</div><!--这里除了v-show,还可以用v-if以及动态组件-->
		</transition>
		<button @click="btnClick">Change</button>	
	</div>

	<script>
		var vm = new Vue({
			el: '#root',
			data: {
				show: true
			},
			methods: {
				btnClick: function(){
					this.show=!this.show
				}
			}
		})
	</script>
</body>

补充个知识点:当用到transition标签时,会自动创建enter-active、leave-active这样的类。也可以自定义类的名字,但是要在标签中自定义类的名字<transition name="sh" enter-active-class=“自定义的名” leave-active-class=“自定义的名”>比如上文的是sh-enter-active,如果自定义了就是:自定义的名{}

2.在Vue中使用Animate.css库

keyframes形式的c3动画

<style>
	/*定义一个名为a的keyframes动画效果*/
	@keyframes a{
		0% {
			transform: scale(0);
		}
		50% {
			transform: scale(1.5);
		}
		100% {
			transform: scale(1);
		}
	}
	.sh-enter-active{
		/*transform-origin:保证动画执行过程中的位置*/
		transform-origin:left center;
		/*调用动画效果:a*/
		animation: a 1s;
	}
	.sh-leave-active{
		transform-origin:left center;
		/*reverse反向执行*/
		animation: a 1s reverse;
	}
</style>

Animate库:如上文的keyframes形式的c3动画可以在头文件中直接导入Animate库,而不需要再书写(@keyframes 不用写,style中的enter-active、leave-active不用写)
需要协同的是上文补充的知识点,自定义类名必须是“animate ???”(这里的 ???是不同的样式名,具体选择什么样式在animate官网上可以找到)

3.在Vue中同时使用过渡和动画

补充个知识点:当页面第一次加载时,并没有动画效果,如果想让页面第一次渲染时就有动画效果,需要在transition标签中,再加入两个属性。
appear、appear-active-class=“animated 效果名”
在这里插入图片描述
1.vue同时使用动画与过渡效果方法:
animate库定义的是@keyframes形式的动画,如果想和过渡动画同时使用,需要在自定义类名中加上“transition标签的name-enter/leave-active(transition自动创建的类)”,并且style标签中写过渡代码(上文1)。

2.动画与过渡效果的时长问题:
由于animate库的动画效果(库文件已定义好)与过渡动画效果(transition)的时间不同,所以需要在transition标签中加上属性:type=“transition”(意思是我的动画既有animate动画又有transition过渡动画,且动画时长以transition的动画时长为准)

除此之外,还可以自定义时长
在transition标签中加上:duration=“2000”(2000ms)的属性,就是自定义时长

复杂的自定义时长
:duration={enter: 10000, leave: 20000}(进场10000ms,出场20000ms)

4.Vue中的JS动画与Velocity.js(动画库)的结合

之前都是通过css实现动画效果,js也可以实现动画效果,Vue中提供了很多js动画钩子(事件)
在这里插入图片描述
通过事件触发处理函数,before和after中都有一个参数el(被transition包裹的标签),enter/leave会有两个参数,第一个是el,第二个参数done表示该过程已结束,用法是done()

Velocity.js(动画库)
头文件引入Velocity.js文件
在这里插入图片描述
当velocity执行完动画之后,complete这个属性对应的内容会被自动执行

5.Vue中多个元素或组件的过渡动画

多元素过渡:
在这里插入图片描述
每个元素都要有一个key值,才不会出现复用DOM的问题
transition标签中的mode属性,in-out是先显示后隐藏,out-in则相反

多组件过渡:
需要动态组件
在这里插入图片描述

6.Vue中ul的过渡动画

transition-group标签
style样式与transition标签相同
在这里插入图片描述

7.Vue中的动画封装

在这里插入图片描述
样式也可以封装到动画组件中,这就要使用js动画
即在子组件的模板属性中,加上js事件(上文4)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值