fix: 🐛 修复transitiont打开后立即关闭时无法关闭的问题

This commit is contained in:
weisheng 2024-03-09 23:45:48 +08:00
parent a8dfe5752f
commit c1cebf6de0

View File

@ -92,6 +92,8 @@ const transitionEnded = ref<boolean>(false)
const currentDuration = ref<number>(300)
//
const classes = ref<string>('')
// enterleave
const enterPromise = ref<Promise<void> | null>(null)
const emit = defineEmits(['click', 'before-enter', 'enter', 'before-leave', 'leave', 'after-leave', 'after-enter'])
@ -128,6 +130,8 @@ function observerShow(value: boolean) {
}
function enter() {
if (enterPromise.value) return
enterPromise.value = new Promise((resolve) => {
const classNames = getClassNames(props.name)
const duration = isObj(props.duration) ? (props.duration as any).enter : props.duration
status.value = 'enter'
@ -143,11 +147,15 @@ function enter() {
requestAnimationFrame(() => {
transitionEnded.value = false
classes.value = classNames['enter-to']
resolve()
})
})
})
})
}
function leave() {
if (!enterPromise.value) return
enterPromise.value.then(() => {
if (!display.value) return
const classNames = getClassNames(props.name)
const duration = isObj(props.duration) ? (props.duration as any).leave : props.duration
@ -161,10 +169,14 @@ function leave() {
requestAnimationFrame(() => {
transitionEnded.value = false
setTimeout(() => onTransitionEnd(), currentDuration.value)
setTimeout(() => {
onTransitionEnd()
enterPromise.value = null
}, currentDuration.value)
classes.value = classNames['leave-to']
})
})
})
}
function onTransitionEnd() {
if (transitionEnded.value) return