You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.8 KiB
70 lines
1.8 KiB
import { canIUseAnimate } from '../common/version'; |
|
import { getRect } from '../common/utils'; |
|
function useAnimate(context, expanded, mounted, height) { |
|
const selector = '.van-collapse-item__wrapper'; |
|
if (expanded) { |
|
context.animate( |
|
selector, |
|
[ |
|
{ height: 0, ease: 'ease-in-out', offset: 0 }, |
|
{ height: `${height}px`, ease: 'ease-in-out', offset: 1 }, |
|
{ height: `auto`, ease: 'ease-in-out', offset: 1 }, |
|
], |
|
mounted ? 300 : 0, |
|
() => { |
|
context.clearAnimation(selector); |
|
} |
|
); |
|
return; |
|
} |
|
context.animate( |
|
selector, |
|
[ |
|
{ height: `${height}px`, ease: 'ease-in-out', offset: 0 }, |
|
{ height: 0, ease: 'ease-in-out', offset: 1 }, |
|
], |
|
300, |
|
() => { |
|
context.clearAnimation(selector); |
|
} |
|
); |
|
} |
|
function useAnimation(context, expanded, mounted, height) { |
|
const animation = wx.createAnimation({ |
|
duration: 0, |
|
timingFunction: 'ease-in-out', |
|
}); |
|
if (expanded) { |
|
if (height === 0) { |
|
animation.height('auto').top(1).step(); |
|
} else { |
|
animation |
|
.height(height) |
|
.top(1) |
|
.step({ |
|
duration: mounted ? 300 : 1, |
|
}) |
|
.height('auto') |
|
.step(); |
|
} |
|
context.setData({ |
|
animation: animation.export(), |
|
}); |
|
return; |
|
} |
|
animation.height(height).top(0).step({ duration: 1 }).height(0).step({ |
|
duration: 300, |
|
}); |
|
context.setData({ |
|
animation: animation.export(), |
|
}); |
|
} |
|
export function setContentAnimate(context, expanded, mounted) { |
|
getRect(context, '.van-collapse-item__content') |
|
.then((rect) => rect.height) |
|
.then((height) => { |
|
canIUseAnimate() |
|
? useAnimate(context, expanded, mounted, height) |
|
: useAnimation(context, expanded, mounted, height); |
|
}); |
|
}
|
|
|