<Transition name="your_name" appear> <div v-if="flag">true</div> <div v-else>false</div> </Transition>
//开始:从0到1的过渡 //结束:从1到0的过渡 .v-enter-from, .v-leave-to { opacity: 0; } .v-enter-active, .v-leave-active { // 指定 opacity 参与过渡 transition: opacity 3s ease; // 也可以省略具体的属性;默认所有属性都参与过渡 // transition: 3s ease; }
<Transition @before-enter="onBeforeEnter" @enter="onEnter" @after-enter="onAfterEnter" @enter-cancelled="onEnterCancelled" @before-leave="onBeforeLeave" @leave="onLeave" @after-leave="onAfterLeave" @leave-cancelled="onLeaveCancelled" > </Transition>
// 在元素被插入到 DOM 之前被调用 // 用这个来设置元素的 "enter-from" 状态 function onBeforeEnter(el) {} // 在元素被插入到 DOM 之后的下一帧被调用 // 用这个来开始进入动画 function onEnter(el, done) { // 调用回调函数 done 表示过渡结束 // 如果与 CSS 结合使用,则这个回调是可选参数 done() } // 当进入过渡完成时调用。 function onAfterEnter(el) {} // 当进入过渡在完成之前被取消时调用 function onEnterCancelled(el) {} // 在 leave 钩子之前调用 // 大多数时候,你应该只会用到 leave 钩子 function onBeforeLeave(el) {} // 在离开过渡开始时调用 // 用这个来开始离开动画 function onLeave(el, done) { // 调用回调函数 done 表示过渡结束 // 如果与 CSS 结合使用,则这个回调是可选参数 done() } // 在离开过渡完成、 // 且元素已从 DOM 中移除时调用 function onAfterLeave(el) {} // 仅在 v-show 过渡中可用 function onLeaveCancelled(el) {}
<Transition name="scale" appear> <slot></slot> </Transition>
<Transition :name="transition-name" appear> <slot></slot> </Transition>
<Transition> <Modal v-if="isShow" v-model="isShow"></Modal> </Transition>
.modal { position: fixed; left: 0; bottom: 0; width: 100%; z-index: 9; } .v-enter-from, .v-leave-to { bottom: -100%; } .v-enter-active, .v-leave-active { // 指定过渡属性 transition: bottom 0.5s ease-in-out; // 不指定过渡属性;默认所有属性都参与过渡 transition: 0.5s ease-in-out; }
<button @click="toBaidu">enter</button> <Transition name="zoom" @after-leave="onAfterLeave"> <div class="item" v-if="isEnter">click to enter baidu</div> </Transition>
let isEnter = ref(true) const toBaidu = () => { isEnter.value = false } const onAfterLeave = () => { console.log('leave end'); window.location.href = 'https://www.baidu.com' }
<div> <Transition name="my-fadein" appear> <slot></slot> </Transition> </div>
.my-fadein-enter-from, .my-fadein-leave-to { opacity: 0; } .my-fadein-enter-active, .my-fadein-leave-active { transition: opacity 0.4s; }
<div> <button @click="renderDom">render</button> <Fadein> <p v-if="isShow">hi,there</p> </Fadein> </div>
拓展:使用列表渲染,尝试为每一项增加封装的过渡效果;如果需要依次延时渲染,如何实现???