一文搞懂Vue里的过渡和动画
作者:前端碎碎念
过渡的 CSS 类名
Vue的过渡功能是通过添加CSS类名来实现过渡效果。在过渡过程中,Vue会根据不同的阶段给元素添加不同的CSS类名,如v-enter
、v-enter-active
、v-leave
、v-leave-active
等。适用于需要在组件之间
添加平滑过渡效果的场景,如淡入淡出、滑动等。
<template> <transition name="fade"> <p v-if="show">This is a fading element.</p> </transition> <button @click="toggleShow">Toggle Show</button> </template> <style> .fade-enter-active, .fade-leave-active { transition: opacity 0.5s; } .fade-enter, .fade-leave-to { opacity: 0; } </style> <script> export default { data() { return { show: false }; }, methods: { toggleShow() { this.show = !this.show; } } }; </script>
条件过渡的 CSS 类名
Vue还支持根据条件动态添加过渡的CSS类名。可以使用:class
绑定来根据条件动态添加过渡的CSS类名,适用于根据条件
动态切换过渡效果的场景,根据不同的条件添加不同的过渡效果。
<template> <transition :name="transitionName"> <p v-if="show">This is a dynamic transition element.</p> </transition> <button @click="toggleShow">Toggle Show</button> </template> <script> export default { data() { return { show: false, transitionName: 'fade' }; }, methods: { toggleShow() { this.show = !this.show; this.transitionName = this.show ? 'slide' : 'fade'; } } }; </script>
JavaScript 钩子函数
Vue提供了一些JavaScript钩子函数,用于在过渡过程中执行自定义的JavaScript代码。可以使用beforeEnter
、enter
、afterEnter
、beforeLeave
、leave
、afterLeave
等钩子函数来执行自定义的过渡逻辑。适用于需要在过渡过程中执行自定义的JavaScript逻辑
的场景,如动态修改元素样式等。
<template> <transition @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter" @before-leave="beforeLeave" @leave="leave" @after-leave="afterLeave" > <p v-if="show">This is a custom transition element.</p> </transition> <button @click="toggleShow">Toggle Show</button> </template> <script> export default { data() { return { show: false }; }, methods() { beforeEnter(el) { console.log('Before Enter'); el.style.opacity = 0; }, enter(el, done) { console.log('Enter'); setTimeout(() => { el.style.opacity = 1; done(); }, 1000); }, afterEnter(el) { console.log('After Enter'); }, beforeLeave(el) { console.log('Before Leave'); el.style.opacity = 1; }, leave(el, done) { console.log('Leave'); setTimeout(() => { el.style.opacity = 0; done(); }, 1000); }, afterLeave(el) { console.log('After Leave'); }, toggleShow() { this.show = !this.show; } } } </script>
列表过渡
Vue提供了专门的列表过渡功能,用于在列表中添加过渡效果。可以使用<transition-group>
组件来包裹列表项,并使用v-move
、v-enter
、v-leave
等CSS类名来定义列表项的过渡效果。 适用于在列表中添加过渡效果的场景,如列表项的渐显、滑动等过渡效果。
<template> <transition-group name="list" tag="ul"> <li v-for="item in items" :key="item.id">{{ item.text }}</li> </transition-group> <button @click="addItem">Add Item</button> </template> <style> .list-enter-active, .list-leave-active { transition: all 0.5s; } .list-enter, .list-leave-to { opacity: 0; transform: translateY(20px); } </style> <script> export default { data() { return { items: [ { id: 1, text: 'Item 1' }, { id: 2, text: 'Item 2' }, { id: 3, text: 'Item 3' } ] }; }, methods: { addItem() { const newItem = { id: Date.now(), text: 'New Item' }; this.items.push(newItem); } } }; </script>
动态过渡和动画:
Vue支持根据动态数据来触发过渡和动画效果。可以使用动态绑定来根据数据的变化来触发过渡和动画效果。适用于根据动态数据
触发过渡和动画效果的场景.
<template> <transition :name="transitionName"> <p v-if="show">This is a dynamic transition element.</p> </transition> <button @click="toggleShow">Toggle Show</button> </template> <script> export default { data() { return { show: false, transitionName: '' }; }, methods: { toggleShow() { this.show = !this.show; this.transitionName = this.show ? 'fade' : 'slide'; } } }; </script>
自定义过渡和动画
Vue允许自定义过渡和动画效果,以满足特定的需求。可以使用<transition>
和<transition-group>
组件的属性和事件来自定义过渡和动画效果。适用于需要自定义过渡和动画效果的场景,通过自定义CSS样式和JavaScript钩子函数来实现特定的过渡和动画效果。
<template> <transition name="custom-transition" @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter" @before-leave="beforeLeave" @leave="leave" @after-leave="afterLeave" > <p v-if="show">This is a custom transition element.</p> </transition> <button @click="toggleShow">Toggle Show</button> </template> <style> .custom-transition-enter-active, .custom-transition-leave-active { transition: opacity 0.5s, transform 0.5s; } .custom-transition-enter, .custom-transition-leave-to { opacity: 0; transform: translateY(20px); } </style> <script> export default { data() { return { show: false }; }, methods: { beforeEnter(el) { el.style.opacity = 0; el.style.transform = 'translateY(20px)'; }, enter(el, done) { setTimeout(() => { el.style.opacity = 1; el.style.transform = 'translateY(0)'; done(); }, 1000); }, afterEnter(el) { // 执行进入后的操作 }, beforeLeave(el) { // 执行离开前的操作 }, leave(el, done) { setTimeout(() => { el.style.opacity = 0; el.style.transform = 'translateY(20px)'; done(); }, 1000); }, afterLeave(el) { // 执行离开后的操作 }, toggleShow() { this.show = !this.show; } } }; </script>
这些示例涵盖了不同的过渡和动画应用场景,可以根据具体的需求和场景选择适合的示例。
以上就是一文搞懂Vue里的过渡和动画的详细内容,更多关于Vue 过渡和动画的资料请关注脚本之家其它相关文章!