Skip to content

Commit eae898e

Browse files
authored
Merge pull request #167 from react-component/fix-no-mask
fix: scrollLocker lock trigger should disabled when no mask
2 parents f3d240f + 6e2bfa2 commit eae898e

File tree

3 files changed

+142
-4
lines changed

3 files changed

+142
-4
lines changed

examples/no-mask.tsx

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
/* eslint-disable no-console,react/no-multi-comp */
2+
import { Icon, Menu } from 'antd';
3+
import * as React from 'react';
4+
import * as ReactDom from 'react-dom';
5+
6+
import Drawer from '../src';
7+
8+
import 'antd/lib/menu/style';
9+
import 'antd/lib/style';
10+
11+
import '../assets/index.less';
12+
import './assets/index.less';
13+
14+
const {SubMenu} = Menu;
15+
const MenuItemGroup = Menu.ItemGroup;
16+
class Demo extends React.Component {
17+
public state = {
18+
open: false,
19+
};
20+
21+
public onSwitch = () => {
22+
const { open } = this.state;
23+
this.setState({
24+
open: !open,
25+
});
26+
};
27+
28+
public render() {
29+
return (
30+
<div>
31+
<Drawer width="250px" showMask={false}>
32+
<Menu
33+
style={{ height: '200%', width: 'calc(100% - 1px)' }} // 选中的线超出
34+
defaultSelectedKeys={['1']}
35+
defaultOpenKeys={['sub1']}
36+
mode="inline"
37+
>
38+
<SubMenu
39+
key="sub1"
40+
title={
41+
<span>
42+
<Icon type="mail" />
43+
<span>Navigation One</span>
44+
</span>
45+
}
46+
>
47+
<MenuItemGroup key="g1" title="Item 1">
48+
<Menu.Item key="1">Option 1</Menu.Item>
49+
<Menu.Item key="2">Option 2</Menu.Item>
50+
</MenuItemGroup>
51+
<MenuItemGroup key="g2" title="Item 2">
52+
<Menu.Item key="3">Option 3</Menu.Item>
53+
<Menu.Item key="4">Option 4</Menu.Item>
54+
</MenuItemGroup>
55+
</SubMenu>
56+
<SubMenu
57+
key="sub2"
58+
title={
59+
<span>
60+
<Icon type="appstore" />
61+
<span>Navigation Two</span>
62+
</span>
63+
}
64+
>
65+
<Menu.Item key="5">Option 5</Menu.Item>
66+
<Menu.Item key="6">Option 6</Menu.Item>
67+
<SubMenu key="sub3" title="Submenu">
68+
<Menu.Item key="7">Option 7</Menu.Item>
69+
<Menu.Item key="8">Option 8</Menu.Item>
70+
</SubMenu>
71+
</SubMenu>
72+
<SubMenu
73+
key="sub4"
74+
title={
75+
<span>
76+
<Icon type="setting" />
77+
<span>Navigation Three</span>
78+
</span>
79+
}
80+
>
81+
<Menu.Item key="9">Option 9</Menu.Item>
82+
<Menu.Item key="10">Option 10</Menu.Item>
83+
<Menu.Item key="11">Option 11</Menu.Item>
84+
<Menu.Item key="12">Option 12</Menu.Item>
85+
</SubMenu>
86+
</Menu>
87+
</Drawer>
88+
<div
89+
style={{
90+
width: '100%',
91+
height: 667,
92+
background: '#fff000',
93+
color: '#fff',
94+
textAlign: 'center',
95+
lineHeight: '667px',
96+
}}
97+
>
98+
内容区块
99+
</div>
100+
</div>
101+
);
102+
}
103+
}
104+
105+
export default Demo;

src/DrawerChild.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class DrawerChild extends React.Component<IDrawerChildProps, IState> {
9393
} catch (err) {}
9494
this.passive = passiveSupported ? { passive: false } : false;
9595
}
96-
const { open, getContainer } = this.props;
96+
const { open, getContainer, showMask } = this.props;
9797
const container = getContainer && getContainer();
9898
this.drawerId = `drawer_id_${Number(
9999
(Date.now() + Math.random())
@@ -110,12 +110,14 @@ class DrawerChild extends React.Component<IDrawerChildProps, IState> {
110110
this.forceUpdate(() => {
111111
this.domFocus();
112112
});
113-
this.props.scrollLocker?.lock();
113+
if (showMask) {
114+
this.props.scrollLocker?.lock();
115+
}
114116
}
115117
}
116118

117119
public componentDidUpdate(prevProps: IDrawerChildProps) {
118-
const { open, getContainer, scrollLocker } = this.props;
120+
const { open, getContainer, scrollLocker, showMask } = this.props;
119121
const container = getContainer && getContainer();
120122
if (open !== prevProps.open) {
121123
if (container && container.parentNode === document.body) {
@@ -124,7 +126,9 @@ class DrawerChild extends React.Component<IDrawerChildProps, IState> {
124126
this.openLevelTransition();
125127
if (open) {
126128
this.domFocus();
127-
scrollLocker?.lock();
129+
if (showMask) {
130+
scrollLocker?.lock();
131+
}
128132
} else {
129133
scrollLocker?.unLock();
130134
}

tests/mask.spec.tsx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { mount } from 'enzyme';
2+
import * as React from 'react';
3+
import Drawer from '../src';
4+
5+
describe('Drawer Mask', () => {
6+
it('show mask', () => {
7+
const wrapper = mount(<Drawer open />);
8+
9+
expect(document.body.className).toBe('ant-scrolling-effect');
10+
11+
wrapper.setProps({
12+
open: false,
13+
});
14+
15+
expect(document.body.className).toBe('');
16+
});
17+
18+
it('no mask', () => {
19+
const wrapper = mount(<Drawer open showMask={false} />);
20+
21+
expect(document.body.className).toBe('');
22+
23+
wrapper.setProps({
24+
open: false,
25+
});
26+
27+
expect(document.body.className).toBe('');
28+
});
29+
});

0 commit comments

Comments
 (0)