Skip to content

Commit 677b454

Browse files
committed
1 parent 67d10c0 commit 677b454

File tree

1 file changed

+29
-19
lines changed

1 file changed

+29
-19
lines changed

src/DrawerChild.tsx

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ class DrawerChild extends React.Component<IDrawerChildProps, IState> {
124124
const { getOpenCount, open } = this.props;
125125
delete currentDrawer[this.drawerId];
126126
if (open) {
127-
this.setLevelDomTransform(false);
127+
this.setLevelTransform(false);
128128
}
129129
if (typeof getOpenCount === 'function' && !getOpenCount()) {
130130
document.body.style.overflow = '';
@@ -204,34 +204,44 @@ class DrawerChild extends React.Component<IDrawerChildProps, IState> {
204204
? this.contentDom.getBoundingClientRect()[isHorizontal ? 'width' : 'height']
205205
: 0;
206206
const value = (isHorizontal ? width : height) || contentValue;
207-
this.setLevelDomTransform(open, placementName, value);
207+
this.setLevelAndScrolling(open, placementName, value);
208208
}
209209

210-
private setLevelDomTransform = (
210+
private setLevelTransform = (
211211
open?: boolean,
212212
placementName?: string,
213213
value?: string | number,
214+
right?: number,
214215
) => {
215-
const { placement, levelMove, duration, ease, onChange, showMask } = this.props;
216+
const { placement, levelMove, duration, ease, showMask } = this.props;
217+
// router 切换时可能会导至页面失去滚动条,所以需要时时获取。
218+
this.levelDom.forEach(dom => {
219+
dom.style.transition = `transform ${duration} ${ease}`;
220+
addEventListener(dom, transitionEnd, this.transitionEnd);
221+
let levelValue = open ? value : 0;
222+
if (levelMove) {
223+
const $levelMove = transformArguments(levelMove, { target: dom, open });
224+
levelValue = open ? $levelMove[0] : $levelMove[1] || 0;
225+
}
226+
const $value = typeof levelValue === 'number' ? `${levelValue}px` : levelValue;
227+
let placementPos = placement === 'left' || placement === 'top' ? $value : `-${$value}`;
228+
placementPos = showMask && placement === 'right' && right ?
229+
`calc(${placementPos} + ${right}px)` : placementPos;
230+
dom.style.transform = levelValue ? `${placementName}(${placementPos})` : '';
231+
});
232+
}
233+
234+
private setLevelAndScrolling = (
235+
open?: boolean,
236+
placementName?: string,
237+
value?: string | number,
238+
) => {
239+
const { onChange } = this.props;
216240
if (!windowIsUndefined) {
217241
const right = document.body.scrollHeight >
218242
(window.innerHeight || document.documentElement.clientHeight) &&
219243
window.innerWidth > document.body.offsetWidth ? getScrollBarSize(true) : 0;
220-
// router 切换时可能会导至页面失去滚动条,所以需要时时获取。
221-
this.levelDom.forEach(dom => {
222-
dom.style.transition = `transform ${duration} ${ease}`;
223-
addEventListener(dom, transitionEnd, this.transitionEnd);
224-
let levelValue = open ? value : 0;
225-
if (levelMove) {
226-
const $levelMove = transformArguments(levelMove, { target: dom, open });
227-
levelValue = open ? $levelMove[0] : $levelMove[1] || 0;
228-
}
229-
const $value = typeof levelValue === 'number' ? `${levelValue}px` : levelValue;
230-
let placementPos = placement === 'left' || placement === 'top' ? $value : `-${$value}`;
231-
placementPos = showMask && placement === 'right' && right ?
232-
`calc(${placementPos} + ${right}px)` : placementPos;
233-
dom.style.transform = levelValue ? `${placementName}(${placementPos})` : '';
234-
});
244+
this.setLevelTransform(open, placementName, value, right);
235245
this.toggleScrollingToDrawerAndBody(right);
236246
}
237247
if (onChange) {

0 commit comments

Comments
 (0)