fix(transition): handle edge case of cancel leave before next frame
fix #4462
This commit is contained in:
parent
9309b044bd
commit
59cf2958e7
@ -174,7 +174,10 @@ export function resolveTransitionProps(
|
|||||||
done && done()
|
done && done()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let isLeaving = false
|
||||||
const finishLeave = (el: Element, done?: () => void) => {
|
const finishLeave = (el: Element, done?: () => void) => {
|
||||||
|
isLeaving = false
|
||||||
|
removeTransitionClass(el, leaveFromClass)
|
||||||
removeTransitionClass(el, leaveToClass)
|
removeTransitionClass(el, leaveToClass)
|
||||||
removeTransitionClass(el, leaveActiveClass)
|
removeTransitionClass(el, leaveActiveClass)
|
||||||
done && done()
|
done && done()
|
||||||
@ -221,6 +224,7 @@ export function resolveTransitionProps(
|
|||||||
onEnter: makeEnterHook(false),
|
onEnter: makeEnterHook(false),
|
||||||
onAppear: makeEnterHook(true),
|
onAppear: makeEnterHook(true),
|
||||||
onLeave(el, done) {
|
onLeave(el, done) {
|
||||||
|
isLeaving = true
|
||||||
const resolve = () => finishLeave(el, done)
|
const resolve = () => finishLeave(el, done)
|
||||||
addTransitionClass(el, leaveFromClass)
|
addTransitionClass(el, leaveFromClass)
|
||||||
if (__COMPAT__ && legacyClassEnabled) {
|
if (__COMPAT__ && legacyClassEnabled) {
|
||||||
@ -230,6 +234,10 @@ export function resolveTransitionProps(
|
|||||||
forceReflow()
|
forceReflow()
|
||||||
addTransitionClass(el, leaveActiveClass)
|
addTransitionClass(el, leaveActiveClass)
|
||||||
nextFrame(() => {
|
nextFrame(() => {
|
||||||
|
if (!isLeaving) {
|
||||||
|
// cancelled
|
||||||
|
return
|
||||||
|
}
|
||||||
removeTransitionClass(el, leaveFromClass)
|
removeTransitionClass(el, leaveFromClass)
|
||||||
if (__COMPAT__ && legacyClassEnabled) {
|
if (__COMPAT__ && legacyClassEnabled) {
|
||||||
removeTransitionClass(el, legacyLeaveFromClass)
|
removeTransitionClass(el, legacyLeaveFromClass)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user