Vue中的动画封装

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Hello World</title>
	<script src="vue.js" type="text/javascript" charset="utf-8"></script>
	<link rel="stylesheet" type="text/css" href="animate.css">
	<script src="jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
	<script src="velocity.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
	<div id="vm">
		<fade :show="show">
			<h1>hellow resword</h1>
		</fade>
		<button type="button" @click="handleClick">Change</button>
	</div>
	<script>
		Vue.component('fade', {
			props: ['show'],
			template: `
				<transition @before-enter="handleBeforeEnter"
							@enter="handleEnter">
					<slot v-if="show"></slot>
				</transition>
			`,
			methods: {
				handleBeforeEnter: function(el) {
					el.style.color = 'red';
				},
				handleEnter: function(el, done) {
					setTimeout(() => {
						el.style.color = 'green';
						done();
					}, 2000)
				}
			}
		});
		var vm = new Vue({
			el: '#vm',
			data: {
				show: true
			},
			methods: {
				handleClick: function() {
					this.show = !this.show;
				}
			}
		});
	</script>
</body>
</html>

通过父组件的show来判断是否显示,

template里面通过js动画来实现特效,而不是使用CSS动画放在head中实现,这样只需要调用模板的名字,然后往里面插槽,就可以使用特效了

猜你喜欢

转载自blog.csdn.net/VVVZCS/article/details/82422629