内容简介:下面这段代码,是点击按钮实现此时有一个需求,希望是在显示与隐藏时,能实现渐隐渐现的动画效果。如果希望
下面这段代码,是点击按钮实现 hello world 显示与隐藏
<div id="root">
<div v-if="show">hello world</div>
<button @click="handleClick">按钮</button>
</div>
let vm = new Vue({
el: '#root',
data: {
show:true
},
methods: {
handleClick(){
this.show = !this.show
}
}
})
此时有一个需求,希望是在显示与隐藏时,能实现渐隐渐现的动画效果。
<div id="root">
<transition name="fade">
<div v-if="show">hello world</div>
</transition>
<button @click="handleClick">按钮</button>
</div>
let vm = new Vue({
el: '#root',
data: {
show:true
},
methods: {
handleClick(){
this.show = !this.show
}
}
})
如果希望 hello world 有一个动画效果的话,需要在外面套一层 transition 标签,意思它包裹的内容,有一个动画效果,可以给它一个名字 name="fade" 。
enter
当一个元素被 transition 标签包裹之后,Vue 会自动的分析元素的 css 样式,然后构建动画流程
在动画还没有执行的一瞬间,Vue 会帮我们在 dom 标签上添加两个 class ,分别是 fade-enter 、 fade-enter-active 。
当动画第一帧执行结束之后, transition 这个标签分析过,里面有一个动画效果,Vue 会在动画运行到第二帧的时候,会将 dom 标签上 v-enter 的 class 删除,再添加一个 v-enter-to 的 class 。
接着动画会继续执行,执行到结束的一瞬间,Vue 会干一件事,它会把之前添加的 v-enter-to 和 v-enter-active 都删除,
.fade-enter{
opacity: 0;
}
.fade-enter-active{
transition: opacity 3s;
}
<div id="root">
<transition name="fade">
<div v-if="show">hello world</div>
</transition>
<button @click="handleClick">按钮</button>
</div>
let vm = new Vue({
el: '#root',
data: {
show:true
},
methods: {
handleClick(){
this.show = !this.show
}
}
})
我们只需要在 css 中给 fade-enter 和 fade-enter-active 分别写上样式就行了。这里要注意的是 Vue 中默认以 v 开头,如: v-enter , transition 加个 name 属性,就可以用 name 属性值做开头,如: fade-enter 。
现在这里两个 class 的意思是:
动画还没执行时,就已经有 fade-enter , fade-enter-active ,动画第一帧运行时 fade-enter 就会被移除, css 效果 opacity: 0 就会变成 opacity: 1 ,直到动画执行完 fade-enter-active 才会被移除,这期间它用 transition 对 opacity 进行监控,需要 3s 才能完成。
leave
隐藏的动画流程:
隐藏的第一个瞬间时,Vue 会在 dom 上添加两个 class ,分别是 v-leave 和 v-leave-active
运行到第二帧时,Vue 会将 v-leave 移除,再添加一个 v-leave-to
接着动画会继续执行,执行到结束的一瞬间,Vue 会把之前添加的 v-leave-to 和 v-leave-active 都删除。
.fade-leave-to{
opacity: 0;
}
.fade-leave-active{
transition: opacity 3s;
}
<div id="root">
<transition name="fade">
<div v-if="show">hello world</div>
</transition>
<button @click="handleClick">按钮</button>
</div>
let vm = new Vue({
el: '#root',
data: {
show:true
},
methods: {
handleClick(){
this.show = !this.show
}
}
})
为什么加了这两个 css 动画效果就出来了呢?
从动画执行的第一个瞬间,到动画执行完毕, fade-leave-active 这个 class 都存在。也就是在动画运行过程中,我要时刻监听 div 的 opacity ,一旦 opacity 发生变化,我要让让他在 3s 内执行完毕。
在第一个瞬间 fade-leave 的 opacity 为 1 ,就是显示状态;第二个瞬间 opacity 为 0 了,此时要给它添加一个 fade-leave-to 的 class ,而 fade-leave-active 一直在监听 opacity 的变化,一旦 opacity 发生变化,会让它在 3s 内完成
总结
在 transition 标签中中不光 v-if 能控制显示隐藏, v-show 也能控制显示隐藏,甚至动态组件也行。只要在 transition 中标签中动画发生变化,都会有一个过渡效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Flutter 动画全解析(动画四要素、动画组件、隐式动画组件原理等)
- Lottie动画原理
- Flutter动画的实现原理浅析
- 动画+原理+代码,解读十大经典排序算法
- Android 属性动画的原理及应用
- Vue中的基础过渡动画原理解析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Domain-Driven Design
Eric Evans / Addison-Wesley Professional / 2003-8-30 / USD 74.99
"Eric Evans has written a fantastic book on how you can make the design of your software match your mental model of the problem domain you are addressing. "His book is very compatible with XP. It is n......一起来看看 《Domain-Driven Design》 这本书的介绍吧!
XML 在线格式化
在线 XML 格式化压缩工具
Markdown 在线编辑器
Markdown 在线编辑器