vue动画实现需要transition标签和class属性配合使用, 共有6个属性如下<br /> 入场动画class: v-enter, v-enter-active, v-enter-to<br /> 出场动画class: v-leave, v-leave-active, v-leave-to
<style>
/* vue中的transition组件渲染时,会给子标签添加以下几个class,用于设置动画过程 */
/* 设置transition的入场(创建显示过程)动画 */
.v-enter{ /*入场开始状态*/
transform: translateY(300px);
opacity: 0;
}
.v-enter-active{ /*入场过度的过程*/
transition: all 1s;
}
.v-enter-to{ /*入场结束状态*/
transform: translateY(0px);
opacity: 1;
}
/* 设置transition的出场(销毁隐藏过程)动画 */
.v-leave{ /*出场开始状态*/
transform: translateY(00px);
opacity: 1;
}
.v-leave-active{ /*出场过度的过程*/
transition: all 1s;
}
.v-leave-to{ /*出场结束状态*/
transform: translateY(300px);
opacity: 0;
}
/* 设置h1单独的过度样式 */
.binge-enter, .binge-leave-to{
color: red;
}
.binge-enter-active, .binge-leave-active{
transition: 3s;
}
.binge-enter-to, .binge-leave{
color: black;
}
</style>
<body>
<script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
<div id='myApp'>
<button @click="bool=!bool">显示/隐藏</button>
<!-- 在通过v-if实现标签创建销毁时, 可以设置创建销毁时的过度效果 -->
<transition>
<h1 v-if="bool">李云迪嫖娼被抓,找张三做律师,会被判几年?</h1>
</transition>
<!-- transition有且只能有一个根标签,而且v-if条件必须设置在根标签上, 如果需要给多个标签设置动画, 需要在每一个标签外层添加transtion -->
<transition>
<div v-if="bool">
<h2>2</h2>
<h2>2</h2>
</div>
</transition>
<!-- 给某一个标签设置单独的过度效果, 可以给transition添加name
然后设置class时把v-前缀换成name前缀, 如 v-enter ==> binge-enter-->
<transition name="binge">
<h1 v-if="bool">3333333333</h1>
</transition>
</div>
<script>
new Vue({
el: '#myApp',
data: {
bool: true
},
methods: {
}
})
</script>
</body>