(
vnode, //虚拟dom
rm //回调函数
)
| 11354 | } |
| 11355 | //执行离开过度动画效果执行方式 |
| 11356 | function leave( |
| 11357 | vnode, //虚拟dom |
| 11358 | rm //回调函数 |
| 11359 | ) { |
| 11360 | var el = vnode.elm; |
| 11361 | |
| 11362 | // call enter callback now |
| 11363 | if (isDef(el._enterCb)) { //标志是否执行过_enterCb |
| 11364 | el._enterCb.cancelled = true; //取消 |
| 11365 | el._enterCb(); |
| 11366 | } |
| 11367 | //解析vonde中的transition的name属性获取到一个css过度对象类 |
| 11368 | var data = resolveTransition(vnode.data.transition); |
| 11369 | |
| 11370 | if (isUndef(data) || el.nodeType !== 1) { |
| 11371 | return rm() |
| 11372 | } |
| 11373 | |
| 11374 | /* istanbul ignore if */ |
| 11375 | if (isDef(el._leaveCb)) { |
| 11376 | return |
| 11377 | } |
| 11378 | |
| 11379 | var css = data.css; //vonde 的css类 |
| 11380 | var type = data.type; //vonde 的 类型 如 1,2,3,4.真实dom的类型 |
| 11381 | var leaveClass = data.leaveClass; //离开动画的css 动画过度类 |
| 11382 | var leaveToClass = data.leaveToClass; //离开动画的css 动画过度类 |
| 11383 | var leaveActiveClass = data.leaveActiveClass;//激活离开动画的css 动画过度类 |
| 11384 | |
| 11385 | var beforeLeave = data.beforeLeave; //离开动画的钩子函数 |
| 11386 | var leave = data.leave; //离开动画的钩子函数 |
| 11387 | var afterLeave = data.afterLeave;//离开动画的钩子函数 |
| 11388 | var leaveCancelled = data.leaveCancelled;//离开动画的钩子函数 |
| 11389 | var delayLeave = data.delayLeave; //延迟动画钩子函数 |
| 11390 | var duration = data.duration; //动画时长 |
| 11391 | |
| 11392 | var expectsCSS = css !== false && !isIE9; |
| 11393 | |
| 11394 | // 检测钩子函数 fns 的长度 |
| 11395 | // 数据必须是这样才返回真,也可以是n层fns只要规律是一样嵌套下去就行 |
| 11396 | var userWantsControl = getHookArgumentsLength(leave); |
| 11397 | |
| 11398 | var explicitLeaveDuration = toNumber( |
| 11399 | isObject(duration) |
| 11400 | ? duration.leave |
| 11401 | : duration |
| 11402 | ); |
| 11403 | |
| 11404 | if ("development" !== 'production' && isDef(explicitLeaveDuration)) { |
| 11405 | checkDuration(explicitLeaveDuration, 'leave', vnode); |
| 11406 | } |
| 11407 | |
| 11408 | var cb = el._leaveCb = once(function () { |
| 11409 | if (el.parentNode && el.parentNode._pending) { |
| 11410 | el.parentNode._pending[vnode.key] = null; |
| 11411 | } |
| 11412 | if (expectsCSS) { |
| 11413 | removeTransitionClass(el, leaveToClass); //离开动画的css 动画过度类 |
no test coverage detected