Vue入门笔记Day 8

一.vue中的css动画原理(transition)

1.过渡显示

(1)transition标签

transition表示包裹的内容会有一个动画过渡效果,动画效果必须包含在transition标签里。

(2)动画流程

transition包裹后会vue会自动分析css样式,构建一个动画流程。
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>vue中的css动画原理</title>
		<script src="../vue.js" type="text/javascript" charset="utf-8"></script>
		<style type="text/css">
			.fade-enter {
				opacity: 0;
			}     /* fade-enter被移除,opacity将恢复到1 */
			/* 这个变化将在3s种内完成 */
			.fade-enter-active {
				transition: opacity 3s;
			}
			/* 对opacity进行transition监控,若opacity变化会在三秒钟从0变到opacity的值 */
			/* .v-enter{
				opacity: 0;
			}
			.v-enter-active{
				transition: opacity 3s;  
			} */
		</style>
	</head>
	<body>
		<div id="root">
			<transition name="fade">  <!-- 不屑name默认前缀为v -->
			<!-- 动画效果必须包含在transition标签里
			 transition表示包裹的内容会有一个动画过渡效果-->
			  <!-- transition包裹后会vue会自动分析css样式,构建一个动画流程 -->
				<div v-if="show">
					hello world
				</div>
			</transition>
			<button type="button" @click="handleClick">切换</button>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el:'#root',
				data:{
					show:true
				},
				methods:{
					handleClick:function(){
						this.show=!this.show
					}
				}
			})
		</script>
	</body>
</html>

流程:a.动画将要执行时,fade-enter与fade-enter-active生成。
b.第二帧时,fade-enter被消除,opacity将恢复到1。
c.将会在3s内完成恢复。

2.过渡隐藏

(1)动画流程

在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../vue.js" type="text/javascript" charset="utf-8"></script>
		<style type="text/css">
			.v-enter{
				opacity: 0;
			}
			.v-enter-active{
				transition: opacity 20s;
			}
			.v-leave-to{
				opacity: 0;
			}
			.v-leave-active{
				transition: opacity 5s;	
			}
			/* opacity默认值为1。 */	
	</style>
	</head>
	<body>
		<div id="root">
			<transition>
				<div v-if="show">
					<!-- v-if与v-show都可以只要用transition包裹 -->
					hello world
				</div>
			</transition>
			<button type="button" @click="handleClick">切换</button>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el:'#root',
				data:{
					show:true
				},
				methods:{
					handleClick:function(){
						this.show=!this.show
					}
				}
			})
		</script>
	</body>
</html>

二.在Vue中使用Animate.css库(keyframes)

1.在vue中如何使用@keyframes方式的动画

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>在Vue中使用Animate.css库</title>
		<script src="../vue.js" type="text/javascript" charset="utf-8"></script>
		<style type="text/css">
			   /* 名字为bounce-in的动画效果 */
			@keyframes bounce-in{
				0%{
					transform: scale(0);
				}
				50%{
					transform: scale(1.5);
				}
				100%{
					transform: scale(1);
				}
			}
			.fade-enter-active{
				transform-origin: left center;
				animation: bounce-in 1s;  /* 一秒内运行结束 */
				
			}
			
			.fade-leave-active{
				transform-origin: left center;
				animation: bounce-in 1s reverse;   /* revers让动画反向执行 */
			}
		</style>
	</head>
	<body>
		<div id="root">
			<transition name="fade">
				<div v-if="show">
					hello world
				</div>
			</transition>
			<button type="button" @click="handleClick">切换</button>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el:'#root',
				data:{
					show:true
				},
				methods:{
					handleClick:function(){
						this.show=!this.show
					}
				}
			})
		</script>
	</body>
</html>

自定义class名字

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../vue.js" type="text/javascript" charset="utf-8"></script>
		<style type="text/css">
			@keyframes bounce-in{
				0%{
					transform: scale(0);
				}
				50%{
					transform: scale(1.5);
				}
				100%{
					transform: scale(1);
				}
			}
			.active{
				transform-origin: left center;
				animation: bounce-in 1s;
			}
			
			.leave{
				transform-origin: left center;
				animation: bounce-in 1s reverse;
			}
		</style>
	</head>
	<body>
		<div id="root">     
			<transition name="fade"
			 enter-active-class="active"    
			 leave-active-class="leave"  
			><!-- 自定义class名字 -->
				<div v-if="show">
					hello world
				</div>
			</transition>
			<button type="button" @click="handleClick">切换</button>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el:'#root',
				data:{
					show:true
				},
				methods:{
					handleClick:function(){
						this.show=!this.show
					}
				}
			})
		</script>
	</body>
</html>

2.使用animate.css库

animate.css网址https://animate.style/
animate.css所提供的动画就是@keyframes类型的css动画效果。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../vue.js" type="text/javascript" charset="utf-8"></script>
		<link rel="stylesheet" type="text/css" href="../animate.css"/>
		<style type="text/css">
			
		</style>
	</head>
	<body>
		<div id="root">
			<transition name="fade"
			 enter-active-class="animated wobble"
			 leave-active-class="animated wobble"  
			><!-- 使用animate动画,入场出场的名字都要是animated -->
				<div v-if="show">
					hello world
				</div>
			</transition>
			<button type="button" @click="handleClick">切换</button>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el:'#root',
				data:{
					show:true
				},
				methods:{
					handleClick:function(){
						this.show=!this.show
					}
				}
			})
		</script>
	</body>
</html>

三.在vue中使用过度和动画

1.第一次显示如何有动画效果

appear-active-class要使网页第一次显示也有动画就要加上,还需要在上面声明appear

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../vue.js" type="text/javascript" charset="utf-8"></script>
		<link rel="stylesheet" type="text/css" href="../animate.css"/>
		<style type="text/css">
			
		</style>
	</head>
	<body>
		
		<div id="root">
			<transition name="fade"
			appear
			 enter-active-class="animated wobble"
			 leave-active-class="animated wobble"  
			 appear-active-class="animated wobble"
			><!-- 使用animate动画,入场出场的名字都要是animated -->
			 <!-- appear-active-class要使网页第一次显示也有动画就要加上,还需要在上面声明appear -->
				<div v-if="show">
					hello world
				</div>
			</transition>
			<button type="button" @click="handleClick">切换</button>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el:'#root',
				data:{
					show:true
				},
				methods:{
					handleClick:function(){
						this.show=!this.show
					}
				}
			})
		</script>
	</body>
</html>


2.既要有@keyframes动画效果又要有transition效果

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../vue.js" type="text/javascript" charset="utf-8"></script>
		<link rel="stylesheet" type="text/css" href="../animate.css"/>
		<style type="text/css">
				
			.fade-enter,
			.fade-leave-to{
				opacity: 0;
			}
			.fade-enter-active,
			.fade-leave-active{
				transition: opacity 2s;
			}
			
		</style>
	</head>
	<body>
		
		<div id="root">
			<!-- type="transition"   设置动画时常与transition为准 -->
			<!-- :duration="10000" 自定义动画时间 -->
			<transition 
			<!-- type="transition" -->
			<!-- :duration="10000" -->
			:duration="{enter:5000,leave:10000}"
			<!-- enter为入场动画,leave为出场 -->
			name="fade"
			appear
			 enter-active-class="animated flash fade-enter-activa"
			 leave-active-class="animated wobble fade-leave-active"  
			 appear-active-class="animated wobble">
			<!-- 使用animate动画,入场出场的名字都要是animated -->
			 <!-- appear-active-class要使网页第一次显示也有动画就要加上,还需要在上面声明appear -->
				<div v-if="show">
					hello world
				</div>
			</transition>
			<button type="button" @click="handleClick">切换</button>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el:'#root',
				data:{
					show:true
				},
				methods:{
					handleClick:function(){
						this.show=!this.show
					}
				}
			})
		</script>
	</body>
</html>

<!-- 总结:通过appear与 appear-active-class实现页面初次动画。
	即使用transition动画又使用@keyframes动画。
	type确定与哪一种动画时常为准。
	使用duration设置动画时常。 -->

四.Vue中的Js动画与Velocity.js的结合

1.入场动画

(1)动画钩子before-enter

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="root">
			<transition
			 name="fade" 
			 @before-enter="handleBefoeEnter"
			 @enter="handleEnter"
			 >
			 <!-- 当@before-enter运行玩,动画开始运行,动画都写在在handleEnter里。 -->
				<div v-show="show">
					Hello World
				</div>
			</transition>
			<button type="button" @click="handleClick">toggle</button>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el:"#root",
				data:{
					show:true
				},
				methods:{
					handleClick:function(){
						this.show=!this.show
					},
					// el值是动画包裹的div标签
					handleBefoeEnter:function(el){
						el.style.color ='red'
					},
					// el值一样是动画包裹的div标签,done是回调函数
					handleEnter:function(el,done){
						setTimeout(() =>{
							el.style.color = 'green'
							done()
							//执行结束后要调用done函数,相当于告诉Vue已经执行完了
						},2000)
					},
					// 点击toggle后,变成红色,动画开始运行,2秒中变成绿色
				}
			})
		</script>
	</body>
</html>

(2)动画钩子enter与after-enter

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="root">
			<transition
			 name="fade" 
			 @before-enter="handleBefoeEnter"
			 @enter="handleEnter"
			 @after-enter="handleAfaterEnter"
			 >
			 <!-- 当@before-enter运行玩,动画开始运行,动画都写在在handleEnter里。 -->
				<div v-show="show">
					Hello World
				</div>
			</transition>
			<button type="button" @click="handleClick">toggle</button>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el:"#root",
				data:{
					show:true
				},
				methods:{
					handleClick:function(){
						this.show=!this.show
					},
					// el值是动画包裹的div标签
					handleBefoeEnter:function(el){
						el.style.color ='red'
					},
					// el值一样是动画包裹的div标签,done是回调函数
					handleEnter:function(el,done){
						setTimeout(() =>{
							el.style.color = 'green'
							done()
							//执行结束后要调用done函数,相当于告诉Vue已经执行完了
						},2000)
						setTimeout(() => {
							done()
						},4000)
					},
					// 点击toggle后,变成红色,动画开始运行,2秒中变成绿色,4秒算结束
						
					handleAfaterEnter:function(el){
						el.style.color = "#000"
					}
				}
			})
		</script>
	</body>
</html>

2.出场动画

分别对应的动画钩子为
(1)@before-leave
(2)@leave
(3)@after-enter

3.velocity.js

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值