Skip to content

Commit 78d0253

Browse files
committed
修复虚拟滚动不支持 calc css 函数 的bug
修复当动态高度 max-height="calc(100vh - 210px)" 时无法计算的问题
1 parent f3b3862 commit 78d0253

File tree

1 file changed

+35
-21
lines changed

1 file changed

+35
-21
lines changed

packages/ve-table/src/index.jsx

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
clsName,
55
getNotFixedTotalWidthByColumnKey,
66
} from "./util";
7-
import { getValByUnit, isFunction } from "../../src/utils/index.js";
7+
import { getValByUnit, isFunction, isNumber } from "../../src/utils/index.js";
88
import emitter from "../../src/mixins/emitter";
99
import { COMPS_NAME, EMIT_EVENTS, COMPS_CUSTOM_ATTRS } from "./util/constant";
1010
import Colgroup from "./colgroup";
@@ -216,6 +216,8 @@ export default {
216216
rowKey: "",
217217
columnKey: "",
218218
},
219+
// table offest height
220+
tableOffestHeight: 0,
219221
};
220222
},
221223

@@ -242,14 +244,16 @@ export default {
242244
isVirtualScroll,
243245
virtualScrollOption,
244246
defaultVirtualScrollMinRowHeight,
247+
tableOffestHeight,
245248
} = this;
246249

247-
if (isVirtualScroll && this.maxHeight) {
248-
const minRowHeight =
249-
typeof virtualScrollOption.minRowHeight === "number"
250-
? virtualScrollOption.minRowHeight
251-
: defaultVirtualScrollMinRowHeight;
252-
result = Math.ceil(this.maxHeight / minRowHeight);
250+
if (isVirtualScroll && tableOffestHeight) {
251+
const minRowHeight = isNumber(virtualScrollOption.minRowHeight)
252+
? virtualScrollOption.minRowHeight
253+
: defaultVirtualScrollMinRowHeight;
254+
255+
// 修复当动态高度 max-height="calc(100vh - 210px)" 时无法计算的问题
256+
result = Math.ceil(tableOffestHeight / minRowHeight);
253257
}
254258
return result;
255259
},
@@ -264,10 +268,9 @@ export default {
264268
defaultVirtualScrollBufferScale,
265269
} = this;
266270
if (isVirtualScroll) {
267-
const bufferScale =
268-
typeof virtualScrollOption.bufferScale === "number"
269-
? virtualScrollOption.bufferScale
270-
: defaultVirtualScrollBufferScale;
271+
const bufferScale = isNumber(virtualScrollOption.bufferScale)
272+
? virtualScrollOption.bufferScale
273+
: defaultVirtualScrollBufferScale;
271274

272275
result = Math.min(
273276
virtualScrollStartIndex,
@@ -289,10 +292,9 @@ export default {
289292
defaultVirtualScrollBufferScale,
290293
} = this;
291294
if (isVirtualScroll) {
292-
const bufferScale =
293-
typeof virtualScrollOption.bufferScale === "number"
294-
? virtualScrollOption.bufferScale
295-
: defaultVirtualScrollBufferScale;
295+
const bufferScale = isNumber(virtualScrollOption.bufferScale)
296+
? virtualScrollOption.bufferScale
297+
: defaultVirtualScrollBufferScale;
296298

297299
result = Math.min(
298300
cloneTableData.length - virtualScrollEndIndex,
@@ -810,10 +812,9 @@ export default {
810812
defaultVirtualScrollMinRowHeight,
811813
} = this;
812814

813-
const minRowHeight =
814-
typeof virtualScrollOption.minRowHeight === "number"
815-
? virtualScrollOption.minRowHeight
816-
: defaultVirtualScrollMinRowHeight;
815+
const minRowHeight = isNumber(virtualScrollOption.minRowHeight)
816+
? virtualScrollOption.minRowHeight
817+
: defaultVirtualScrollMinRowHeight;
817818

818819
this.virtualScrollPositions = cloneTableData.map(
819820
(item, index) => ({
@@ -1144,8 +1145,21 @@ export default {
11441145
],
11451146
};
11461147

1148+
// wrapper container props
1149+
const wrapperContainerProps = {
1150+
class: "ve-table",
1151+
props: {
1152+
tagName: "div",
1153+
},
1154+
on: {
1155+
"on-dom-resize-change": ({ height }) => {
1156+
this.tableOffestHeight = height;
1157+
},
1158+
},
1159+
};
1160+
11471161
return (
1148-
<div class="ve-table">
1162+
<VueDomResizeObserver {...wrapperContainerProps}>
11491163
<div {...containerProps}>
11501164
{/* virtual view phantom */}
11511165
{this.getVirtualViewPhantom()}
@@ -1164,7 +1178,7 @@ export default {
11641178
<Footer {...footerProps} />
11651179
</table>
11661180
</div>
1167-
</div>
1181+
</VueDomResizeObserver>
11681182
);
11691183
},
11701184
};

0 commit comments

Comments
 (0)