Skip to content

Commit 3b4198e

Browse files
luwueryyx990803
authored andcommitted
feat(runtime-dom): transition component disable transition property on the first frame (#2531, #2586)
1 parent 0987bb5 commit 3b4198e

File tree

3 files changed

+228
-108
lines changed

3 files changed

+228
-108
lines changed

packages/runtime-dom/src/components/Transition.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ export function resolveTransitionProps(
123123
const resolve = () => finishEnter(el, isAppear, done)
124124
hook && hook(el, resolve)
125125
nextFrame(() => {
126-
addTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass)
126+
enableTransition(el)
127127
removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass)
128128
addTransitionClass(el, isAppear ? appearToClass : enterToClass)
129129
if (!(hook && hook.length > 1)) {
@@ -133,22 +133,40 @@ export function resolveTransitionProps(
133133
}
134134
}
135135

136+
// see issue #2531, #2593
137+
let cacheTransition: string
138+
const disableTransition = (el: Element) => {
139+
const style = (el as HTMLElement).style
140+
cacheTransition = style.transition
141+
style.transitionProperty = 'none'
142+
}
143+
144+
const enableTransition = (el: Element) => {
145+
;(el as HTMLElement).style.transition = cacheTransition
146+
}
147+
136148
return extend(baseProps, {
137149
onBeforeEnter(el) {
138150
onBeforeEnter && onBeforeEnter(el)
151+
addTransitionClass(el, enterActiveClass)
139152
addTransitionClass(el, enterFromClass)
153+
disableTransition(el)
140154
},
141155
onBeforeAppear(el) {
142156
onBeforeAppear && onBeforeAppear(el)
157+
addTransitionClass(el, appearActiveClass)
143158
addTransitionClass(el, appearFromClass)
159+
disableTransition(el)
144160
},
145161
onEnter: makeEnterHook(false),
146162
onAppear: makeEnterHook(true),
147163
onLeave(el, done) {
148164
const resolve = () => finishLeave(el, done)
165+
addTransitionClass(el, leaveActiveClass)
149166
addTransitionClass(el, leaveFromClass)
167+
disableTransition(el)
150168
nextFrame(() => {
151-
addTransitionClass(el, leaveActiveClass)
169+
enableTransition(el)
152170
removeTransitionClass(el, leaveFromClass)
153171
addTransitionClass(el, leaveToClass)
154172
if (!(onLeave && onLeave.length > 1)) {

0 commit comments

Comments
 (0)