Skip to content

Commit f4dfb15

Browse files
committed
[weex] support leave-to enter-to classes and make use of @transition data
1 parent 639680d commit f4dfb15

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

src/platforms/weex/runtime/modules/transition.js

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ function enter (_, vnode) {
2828

2929
const {
3030
enterClass,
31+
enterToClass,
3132
enterActiveClass,
3233
appearClass,
34+
appearToClass,
3335
appearActiveClass,
3436
beforeEnter,
3537
enter,
@@ -55,6 +57,7 @@ function enter (_, vnode) {
5557
}
5658

5759
const startClass = isAppear ? appearClass : enterClass
60+
const toClass = isAppear ? appearToClass : enterToClass
5861
const activeClass = isAppear ? appearActiveClass : enterActiveClass
5962
const beforeEnterHook = isAppear ? (beforeAppear || beforeEnter) : beforeEnter
6063
const enterHook = isAppear ? (typeof appear === 'function' ? appear : enter) : enter
@@ -69,7 +72,8 @@ function enter (_, vnode) {
6972

7073
const stylesheet = vnode.context.$options.style || {}
7174
const startState = stylesheet[startClass]
72-
const endState = stylesheet[activeClass]
75+
const endState = stylesheet[toClass] || stylesheet[activeClass]
76+
const transitionProperties = (stylesheet['@TRANSITION'] && stylesheet['@TRANSITION'][activeClass]) || {}
7377
const expectsCSS = startState && endState
7478

7579
const cb = el._enterCb = once(() => {
@@ -99,8 +103,9 @@ function enter (_, vnode) {
99103
const animation = vnode.context._requireWeexModule('animation')
100104
animation.transition(el.ref, {
101105
styles: endState,
102-
duration: 300,
103-
timingFunction: 'ease-in-out'
106+
duration: transitionProperties.duration || 0,
107+
delay: transitionProperties.delay || 0,
108+
timingFunction: transitionProperties.timingFunction || 'linear'
104109
}, userWantsControl ? noop : cb)
105110
} else if (!userWantsControl) {
106111
cb()
@@ -141,6 +146,7 @@ function leave (vnode, rm) {
141146

142147
const {
143148
leaveClass,
149+
leaveToClass,
144150
leaveActiveClass,
145151
beforeLeave,
146152
leave,
@@ -157,7 +163,8 @@ function leave (vnode, rm) {
157163

158164
const stylesheet = vnode.context.$options.style || {}
159165
const startState = stylesheet[leaveClass]
160-
const endState = stylesheet[leaveActiveClass]
166+
const endState = stylesheet[leaveToClass] || stylesheet[leaveActiveClass]
167+
const transitionProperties = (stylesheet['@TRANSITION'] && stylesheet['@TRANSITION'][leaveActiveClass]) || {}
161168
const expectsCSS = startState && endState
162169

163170
const cb = el._leaveCb = once(() => {
@@ -202,8 +209,9 @@ function leave (vnode, rm) {
202209
function next () {
203210
animation.transition(el.ref, {
204211
styles: endState,
205-
duration: 300,
206-
timingFunction: 'ease-in-out'
212+
duration: transitionProperties.duration || 0,
213+
delay: transitionProperties.delay || 0,
214+
timingFunction: transitionProperties.timingFunction || 'linear'
207215
}, userWantsControl ? noop : cb)
208216
}
209217

@@ -246,6 +254,9 @@ const autoCssTransition = cached(name => {
246254
enterClass: `${name}-enter`,
247255
leaveClass: `${name}-leave`,
248256
appearClass: `${name}-enter`,
257+
enterToClass: `${name}-enter-to`,
258+
leaveToClass: `${name}-leave-to`,
259+
appearToClass: `${name}-enter-to`,
249260
enterActiveClass: `${name}-enter-active`,
250261
leaveActiveClass: `${name}-leave-active`,
251262
appearActiveClass: `${name}-enter-active`

0 commit comments

Comments
 (0)