<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>
拓展:使用列表渲染,尝试为每一项增加封装的过渡效果;如果需要依次延时渲染,如何实现???