一、Vue中实现动画的方式:https://cn.vuejs.org/v2/guide/transitions.html
Vue在插入、更新或者移除DOM时,提供多种不同方式的应用过渡效果。
包括以下工具:
在CSS过渡和动画中自动应用class
可以配合使用第三方CSS动画库,如Animate.css
在过渡钩子函数中使用JavaScript直接操作DOM
可以配合使用第三方JavaScript动画库,如Velocity.js
二、使用过渡类名实现动画:
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8"/>
<meta
name="viewport"
content="width=
,initial-scale=1.0"
/>
<metahttp-equiv="X-UA-Compatible"content="ie=edge"/>
<title>donghua</title>
<linkrel="stylesheet"href="./lib/animate.css"/>
<style>
/*2.自定义两组样式,来控制transition内部的元素实现动画*/
/*v-enter【这是一个时间点】是进入之前,元素的起始状态,此时还没有开始进入*/
/*v-leave-to【这是一个时间点】是动画离开之后,离开的终止状态,此时,元素动画已经结束了*/
.v-enter,
.v-leave-to{
opacity:0;
/*沿着X轴*/
/*transform:translateX(150px);*/
/*沿着Y轴*/
transform:translateY(150px);
}
/*v-enter-active【入场动画的时间段】*/
/*v-leave-active【离场动画的时间段】*/
.v-enter-active,
.v-leave-active{
transition:all0.8sease;
}
</style>
</head>
<body>
<scriptsrc="./lib/vue.js"></script>
<divid="app">
<inputtype="button"value="toggle"@click="flag=!flag"/>
<!--需求:点击按钮,让H3显示,再点击,让H3隐藏-->
<!--1、使用transition元素,把需要被动画控制的元素,包裹起来-->
<transition>
<h3v-if="flag">这是一个H3</h3>
</transition>
</div>
<script>
varvm=newVue({
el:"#app",
data:{
flag:false
}
});
</script>
</body>
</html>
三、使用animate.css类实现动画:
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8"/>
<meta
name="viewport"
content="width=
,initial-scale=1.0"
/>
<metahttp-equiv="X-UA-Compatible"content="ie=edge"/>
<title>donghua</title>
<linkrel="stylesheet"href="./lib/animate.css"/>
</head>
<body>
<scriptsrc="./lib/vue.js"></script>
<divid="app">
<inputtype="button"value="toggle"@click="flag=!flag"/>
<!--使用:duration="{enter:200,leave:400}"来分别设置入场的时长和离场的时长-->
<transition
enter-active-class="bounceIn"
leave-active-class="bounceOut"
:duration="{enter:200,leave:400}"
>
<h3v-if="flag"class="animated">这是一个H3</h3>
</transition>
</div>
<script>
varvm=newVue({
el:"#app",
data:{
flag:false
}
});
</script>
</body>
</html>
四、使用钩子函数:
可以在属性中声明JavaScript钩子
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8"/>
<title>donghua</title>
<style>
/*定义动画小球*/
.ball{
width:15px;
height:15px;
border-radius:50%;
background-color:red;
}
</style>
</head>
<body>
<scriptsrc="./lib/vue.js"></script>
<divid="app">
<inputtype="button"value="从碗里出去"@click="flag=!flag"/>
<!--1.使用transition元素把小球包裹起来-->
<transition
@before-enter="beforeEnter"
@enter="enter"
@after-enter="afterEnter"
>
<divclass="ball"v-show="flag"></div>
</transition>
</div>
<script>
varvm=newVue({
el:"#app",
data:{
flag:false
},
methods:{
//动画钩子函数的第一个参数:el,表示要执行动画的那个DOM元素,是个原生的JSDOM对象
//大家可以认为,el是通过docunment.getElementById('')方式获取到的原生JSDOM对象
beforeEnter(el){
//beforeEnter表示动画入场之前,此时,动画尚未开始,可以在其中设置元素开始动画之前的起始样式
//设置小球开始动画之前的起始位置
el.style.transform="translate(0,0)";
},
enter(el,done){
//这句话没有实际的作用,但是如果不写,出不来动画效果;
//可以认为el.offsetWidth会强制动画刷新
el.offsetWidth;
//enter表示动画开始之后的样式,这里,可以设置小球完成动画之后的,结束状态
el.style.transform="translate(150px,450px)";
el.style.transition="all1sease";
//这里的done,起始就是afterEnter这个函数,也就是说done是afterEnter函数的引用
done();
},
afterEnter(el){
//动画完成后,会调用afterEnter
//console.log("ok");
//这句话,第一个功能就是控制小球的显示与隐藏;
//第二个功能:直接跳过后半场动画,让flag标识符直接变为false;
//当第二次再点击按钮的时候,flag:false--->true
this.flag=!this.flag;
//Vue把一个完整的动画,使用钩子函数,拆分为了两部分:
//我们使用flag标识符,来表示动画的切换flag:false-->true-->false
}
}
});
</script>
</body>
</html>
<transition
v-on:before-enter="beforeEnter"
v-on:enter="enter"
v-on:after-enter="afterEnter"
v-on:enter-cancelled="enterCancelled"
v-on:before-leave="beforeLeave"
v-on:leave="leave"
v-on:after-leave="afterLeave"
v-on:leave-cancelled="leaveCancelled"
>
<!--...-->
</transition>
如果您觉得本文的内容对您的学习有所帮助:
关键字:
html