From 4b787f1b64b57d962745a4c9cb7d39d84fdf3558 Mon Sep 17 00:00:00 2001 From: jkzing Date: Sun, 18 Jun 2017 21:49:16 +0800 Subject: [PATCH 1/3] check toClass before add it --- src/platforms/web/runtime/modules/transition.js | 9 +++++++-- src/platforms/web/runtime/transition-util.js | 4 ++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/platforms/web/runtime/modules/transition.js b/src/platforms/web/runtime/modules/transition.js index 94acb90debc..2acdce7eea7 100644 --- a/src/platforms/web/runtime/modules/transition.js +++ b/src/platforms/web/runtime/modules/transition.js @@ -16,6 +16,7 @@ import { nextFrame, resolveTransition, whenTransitionEnds, + hasTransitionClass, addTransitionClass, removeTransitionClass } from '../transition-util' @@ -149,7 +150,9 @@ export function enter (vnode: VNodeWithData, toggleDisplay: ?() => void) { addTransitionClass(el, startClass) addTransitionClass(el, activeClass) nextFrame(() => { - addTransitionClass(el, toClass) + if (!hasTransitionClass(el, toClass)) { + addTransitionClass(el, toClass) + } removeTransitionClass(el, startClass) if (!cb.cancelled && !userWantsControl) { if (isValidDuration(explicitEnterDuration)) { @@ -257,7 +260,9 @@ export function leave (vnode: VNodeWithData, rm: Function) { addTransitionClass(el, leaveClass) addTransitionClass(el, leaveActiveClass) nextFrame(() => { - addTransitionClass(el, leaveToClass) + if (!hasTransitionClass(el, leaveToClass)) { + addTransitionClass(el, leaveToClass) + } removeTransitionClass(el, leaveClass) if (!cb.cancelled && !userWantsControl) { if (isValidDuration(explicitLeaveDuration)) { diff --git a/src/platforms/web/runtime/transition-util.js b/src/platforms/web/runtime/transition-util.js index d6c8fdf2b28..47e073bc9d0 100644 --- a/src/platforms/web/runtime/transition-util.js +++ b/src/platforms/web/runtime/transition-util.js @@ -68,6 +68,10 @@ export function nextFrame (fn: Function) { }) } +export function hasTransitionClass (el: any, cls: string) { + return el._transitionClasses && el._transitionClasses.indexOf(cls) > -1 +} + export function addTransitionClass (el: any, cls: string) { (el._transitionClasses || (el._transitionClasses = [])).push(cls) addClass(el, cls) From 997f2a05bf1f84d8901bcdfe61475f55315b2f65 Mon Sep 17 00:00:00 2001 From: jkzing Date: Fri, 30 Jun 2017 14:36:43 +0800 Subject: [PATCH 2/3] move hasTransitionClass check inside addTransitionClass --- src/platforms/web/runtime/modules/transition.js | 9 ++------- src/platforms/web/runtime/transition-util.js | 11 +++++------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/platforms/web/runtime/modules/transition.js b/src/platforms/web/runtime/modules/transition.js index 2acdce7eea7..94acb90debc 100644 --- a/src/platforms/web/runtime/modules/transition.js +++ b/src/platforms/web/runtime/modules/transition.js @@ -16,7 +16,6 @@ import { nextFrame, resolveTransition, whenTransitionEnds, - hasTransitionClass, addTransitionClass, removeTransitionClass } from '../transition-util' @@ -150,9 +149,7 @@ export function enter (vnode: VNodeWithData, toggleDisplay: ?() => void) { addTransitionClass(el, startClass) addTransitionClass(el, activeClass) nextFrame(() => { - if (!hasTransitionClass(el, toClass)) { - addTransitionClass(el, toClass) - } + addTransitionClass(el, toClass) removeTransitionClass(el, startClass) if (!cb.cancelled && !userWantsControl) { if (isValidDuration(explicitEnterDuration)) { @@ -260,9 +257,7 @@ export function leave (vnode: VNodeWithData, rm: Function) { addTransitionClass(el, leaveClass) addTransitionClass(el, leaveActiveClass) nextFrame(() => { - if (!hasTransitionClass(el, leaveToClass)) { - addTransitionClass(el, leaveToClass) - } + addTransitionClass(el, leaveToClass) removeTransitionClass(el, leaveClass) if (!cb.cancelled && !userWantsControl) { if (isValidDuration(explicitLeaveDuration)) { diff --git a/src/platforms/web/runtime/transition-util.js b/src/platforms/web/runtime/transition-util.js index 47e073bc9d0..c3ef281c641 100644 --- a/src/platforms/web/runtime/transition-util.js +++ b/src/platforms/web/runtime/transition-util.js @@ -68,13 +68,12 @@ export function nextFrame (fn: Function) { }) } -export function hasTransitionClass (el: any, cls: string) { - return el._transitionClasses && el._transitionClasses.indexOf(cls) > -1 -} - export function addTransitionClass (el: any, cls: string) { - (el._transitionClasses || (el._transitionClasses = [])).push(cls) - addClass(el, cls) + el._transitionClasses = el._transitionClasses || [] + if (el._transitionClasses.indexOf(cls) < 0) { + el._transitionClasses.push(cls) + addClass(el, cls) + } } export function removeTransitionClass (el: any, cls: string) { From ed829d4549e4a9ac1b1007146f841696c617ab6a Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 30 Jun 2017 14:51:40 +0800 Subject: [PATCH 3/3] Update transition-util.js --- src/platforms/web/runtime/transition-util.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/platforms/web/runtime/transition-util.js b/src/platforms/web/runtime/transition-util.js index c3ef281c641..661f420d07f 100644 --- a/src/platforms/web/runtime/transition-util.js +++ b/src/platforms/web/runtime/transition-util.js @@ -69,9 +69,9 @@ export function nextFrame (fn: Function) { } export function addTransitionClass (el: any, cls: string) { - el._transitionClasses = el._transitionClasses || [] - if (el._transitionClasses.indexOf(cls) < 0) { - el._transitionClasses.push(cls) + const transitionClasses = el._transitionClasses || (el._transitionClasses = []) + if (transitionClasses.indexOf(cls) < 0) { + transitionClasses.push(cls) addClass(el, cls) } }