Skip to content

Commit be7543e

Browse files
authored
Merge pull request #47 from Lohoyo/master
修复 Menu 组件的 4 个 bug 和官网的 1 个 bug
2 parents b621082 + 3131eab commit be7543e

4 files changed

Lines changed: 32 additions & 11 deletions

File tree

docs/changelog.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@
1212

1313
## 1.0.1
1414
`2020-3-23`
15+
- Menu
16+
- 🐞 修复 MenuItem 溢出折叠时的可用空间的计算逻辑 [#47](https://github.com/ecomfe/santd/pull/47)
17+
- 🐞 修复 MenuItem 的 padding 没有正常生效的问题 [#47](https://github.com/ecomfe/santd/pull/47)
18+
- 🐞 修复 MenuItem 之间有间隙导致溢出折叠的计算不精确的问题 [#47](https://github.com/ecomfe/santd/pull/47)
19+
- 🐞 修复折叠图标的空间的计算逻辑 [#47](https://github.com/ecomfe/santd/pull/47)
1520
- Table
1621
- 🐞 修复当存在子表格时展开子表格的按钮默认隐藏的问题,改为了默认显示 [#45](https://github.com/ecomfe/santd/pull/45)
1722
- 其它

site/theme/static/header.less

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105
float: right;
106106
font-size: 14px;
107107
font-family: Lato, @font-family;
108+
margin-right: 40px;
108109
&.santd-menu-horizontal {
109110
border-bottom: none;
110111
& > .santd-menu-item,

src/menu/Menu.js

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,6 @@ export default san.defineComponent({
8787
// resize事件的触发频率较高,因此延迟66ms(意味着updateFoldedItems函数的执行频率变为15fps)
8888
this.updateFoldedItemsBind = throttle(this.updateFoldedItems, 66).bind(this);
8989
on(window, 'resize', this.updateFoldedItemsBind);
90-
this.nextTick(() => {
91-
const foldedItemWidth = getOffset(this.ref(`${prefixCls}-fold-item`)).width;
92-
// 用户是否传入了和默认折叠图标的宽度不一样的折叠图标
93-
if (foldedItemWidth !== DEFAULT_FOLDED_ITEM_WIDTH) {
94-
this.foldedItemWidth = foldedItemWidth;
95-
this.updateFoldedItems();
96-
}
97-
});
9890
},
9991
updated() {
10092
this.updateItems();
@@ -116,7 +108,16 @@ export default san.defineComponent({
116108
this.foldedItemWidth = DEFAULT_FOLDED_ITEM_WIDTH;
117109
},
118110
updateFoldedItems() {
119-
let availableMenuWidth = getOffset(this.el).width - (this.foldedItemWidth + FOLDED_ITEM_PADDING);
111+
let availableMenuWidth = getOffset(this.el).width;
112+
const itemFoldedFlags = this.data.get('itemFoldedFlags');
113+
// 是否是可用空间正在变大且目前只有一项折叠项
114+
const isSpecialCase = this.lastAvailableMenuWidth
115+
&& (availableMenuWidth - this.lastAvailableMenuWidth) > 0
116+
&& itemFoldedFlags[itemFoldedFlags.length - 1] && !itemFoldedFlags[itemFoldedFlags.length - 2];
117+
if (this.data.get('hasFoldedItem') && !isSpecialCase) {
118+
availableMenuWidth -= this.foldedItemWidth + FOLDED_ITEM_PADDING;
119+
}
120+
this.lastAvailableMenuWidth = availableMenuWidth;
120121
this.items.forEach((item, index, items) => {
121122
// 折叠项(最后一项)不参与菜单项是否需要被折叠的计算
122123
if (index === items.length - 1) {
@@ -128,7 +129,20 @@ export default san.defineComponent({
128129
item.data.set('isFolded', isFolded);
129130
this.data.set(`itemFoldedFlags[${index}]`, isFolded);
130131
});
131-
this.data.set('hasFoldedItem', availableMenuWidth < 0);
132+
const hasFoldedItem = availableMenuWidth < 0;
133+
this.data.set('hasFoldedItem', hasFoldedItem);
134+
// 用户是否自定义了折叠图标
135+
if (this.sourceSlots.named.overflowedIndicator
136+
&& this.foldedItemWidth === DEFAULT_FOLDED_ITEM_WIDTH
137+
&& hasFoldedItem) {
138+
this.nextTick(() => {
139+
const foldedItemWidth = getOffset(this.ref(`${prefixCls}-fold-item`)).width;
140+
if (foldedItemWidth !== DEFAULT_FOLDED_ITEM_WIDTH) {
141+
this.foldedItemWidth = foldedItemWidth;
142+
this.updateFoldedItems();
143+
}
144+
});
145+
}
132146
},
133147
getSelectedKeys(defaultSelectedKeys) {
134148
let selectedKeys = this.data.get('selectedKeys') || defaultSelectedKeys || [];

src/menu/style/index.less

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@
154154
position: relative;
155155
display: block;
156156
margin: 0;
157-
padding: 0 20px;
157+
padding: 0 20px !important;
158158
white-space: nowrap;
159159
cursor: pointer;
160160
transition: color 0.3s @ease-in-out, border-color 0.3s @ease-in-out,
@@ -291,6 +291,7 @@
291291
}
292292

293293
&-horizontal {
294+
display: flex;
294295
line-height: 46px;
295296
white-space: nowrap;
296297
border: 0;

0 commit comments

Comments
 (0)