vue简单动画实例,学习记录

Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。
包括以下工具:

在 CSS 过渡和动画中自动应用 class
可以配合使用第三方 CSS 动画库,如 Animate.css
在过渡钩子函数中使用 JavaScript 直接操作 DOM
可以配合使用第三方 JavaScript 动画库,如 Velocity.js
在下面只会有几个简单的动画实例
1、有淡入淡出效果

<template>
	<div>
		<h1>动画哈哈</h1>
		<div>
			<button @click="isShow = !isShow">toggle content</button>
			<transition>
				<div v-if="isShow">tansitions的内容</div>
			</transition>
		</div>
	</div>
</template>

<script>
export default {
	data () {
		return {
			isShow: true
		}
	}
}
</script>

<style>
/* 
v-enter 进入时的状态
v-leave-to 离开到的状态
 */
.v-enter, .v-leave-to {
	opacity: 0;
}
/* 
v-enter-to 离开到的状态
v-leave 离开时的状态
 */
 .v-enter-to, .v-leave {
	 opacity: 1;
 }
 /* 
 中间过渡
 v-enter-active 进入时的状态
 v-leave-active 离开时的状态
  */
.v-enter-active, .v-leave-active {
	transition: all 1s;
}

</style>

在这里插入图片描述
对于这些在过渡中切换的类名来说,如果你使用一个没有名字的 ,则 v- 是这些类名的默认前缀。如果你使用了 ,那么 v-enter 会替换为 my-transition-enter。

v-enter-active 和 v-leave-active 可以控制进入/离开过渡的不同的缓和曲线
2、下面是一个有向右移动消失效果的

<template>
	<div>
		<div>
			<button @click="isShow = !isShow">toggle content</button>
			<transition name="show">
				<div v-if="isShow">tansitionsA的内容</div>
			</transition>
		</div>
	</div>
</template>

<script>
export default {
	data () {
		return {
			isShow: true
		}
	}
}
</script>

<style>
/* 进入时的状态 */
.show-enter {
	opacity: 0;
	margin-left: 20px;
}
/* 离开到的状态 */
.show-leave-to {
	opacity: 0;
	margin-left: 30px;
}
/* 进入到的状态 */
 .show-enter-to {
	 opacity: 1;
	 margin-left: 0;
 }
/* 离开时的转台 */
 .v-leave {
	 opacity: 1;
	 margin-left: 0;
 }
 /* 进入过渡中 */
.show-enter-active {
	transition: all 1s;
}
/* 离开过渡中 */
.show-leave-active {
	transition: all 2s;
}

</style>

3、动画添加数字

<template>
	<div>
		<div>
			<button @click="addcount(1)">增加cout</button>
			<button @click="addcount(-1)">减少cout</button>
			<transition-group class="lists" name="slide" tag="ul">
				<li :key="item" v-for="item in count">{{item}}</li>
			</transition-group>
		</div>
	</div>
</template>

<script>
export default {
	data () {
		return {
			isShow: true,
			count: 10
		}
	},
	methods: {
		addcount (num) {
			this.count += 1
		}
	}
}
</script>

<style>
.lists:after {
	clear: both;
	content: '';
	display: block;
}
.lists li {
	list-style: none;
	float: left;
	border: 1px solid #ccc;
	margin: 0 5px;
	padding: 0 5px;
	position: relative;
}
/* 进入时 */
.slide-enter {
	opacity: 0;
	top: 30px;
}
/* 进入到 */
.slide-enter-to {
	opacity: 1;
	top: 0;
}
/* 中间过渡 */
.slide-enter-active {
	transition: all 2s;
}
/* 离开时 */
.slide-leave {
	opacity: 1;
	top: 0;
}
.slide-leave-to {
	opacity: 0;
	top: 30px;
}
.slide-leave-active {
	transition: all 2s;
}

</style>

4、动画翻转----翻翻翻,用到css3的动画知识

<template>
	<div>
		<div>
			<button @click="isShow = !isShow">toggle content</button>
		</div>
		<!-- 通过属性绑定自定义类名
		enter-active-class 定义进来的类名
		leave-active-class 定义出去的类名
		 -->
		<transition
		enter-active-class="box-animate"
		leave-active-class="ain-leave-active"
		>
			<div class="pro" v-if="isShow">tansitionsA的内容</div>
		</transition>
	</div>
</template>

<script>
export default {
	data () {
		return {
			isShow: true
		}
	}
}
</script>

<style>
.box-animate {
	animation: animate 3s;
}

.pro {
	position: absolute;
	z-index: 50px;
	color: #008000;
	width: 200px;
	height: 50px;
	background: #00ff80;
	line-height: 50px;
}
 /* 进入过渡中 */
.ain-enter-active {
	animation: animate 3s;
}
/* 离开过渡中 */
.ain-leave-active {
	animation: animate 3s reverse;
}
@keyframes animate {
	0% {
		left: 500px;
		transform: rotate(0);
		background: hsl(150, 95%, 49%);
	}
	100% {
		right: initial;/* 初始化 */
		left: 0;
		transform: rotate(720deg);
		background: red;
	}
}
</style>

5、这是使用vue中的钩子函数方法,写起来比较麻烦

<template>
	<div>
		<button @click="show = !show">toggle</button>
		<transition
		@before-enter="beforeEnter"
		@enter="enter"
		@befoer-leave="beforeLeave"
		@leave="Leave"
		>
			<div v-if="show">显示内容</div>
		</transition>
	</div>
</template>

<script>
export default {
	data () {
		return {
			show: true
		}
	},
	methods: {
		beforeEnter (el) {
			el.style.marginLeft='50px'
			el.style.opacity = 0
		},
		enter(el, done) {
			el.offsetWidth
			el.style.marginLeft = 0
			el.style.opacity= 1
			
			el.style.transition='all 3s ease'
			done()
		},
		beforeLeave (el) {
			
			el.style.opacity = 1
			el.style.marginLeft=0
		},
		Leave (el, done) {
			el.offsetWidth
			el.style.opacity = 0
			el.style.marginLeft ='50px'
			el.style.transition='all 3s ease'
			done()
		}
	}
}
</script>

<style>

</style>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值