Skip to content

Commit 2a29ec5

Browse files
committed
bug fixed #458
1 parent bdf8a0f commit 2a29ec5

File tree

4 files changed

+82
-20
lines changed

4 files changed

+82
-20
lines changed

examples/src/docs/en/ve-table/api/db.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -705,13 +705,13 @@ export const db = {
705705
optionalVal: "-",
706706
default: "-",
707707
},
708-
/* {
709-
param: "bufferScale",
710-
desc: `缓冲比例。可视范围数据的整数倍,防止滚动过快白屏,默认无缓冲`,
708+
{
709+
param: "bufferCount",
710+
desc: `Number of buffered renderings. By default, only the row data within the height of the current container is rendered. Buffered data can render additional row data, which can effectively solve the problem of merging too many rows of data`,
711711
type: "<code>Number</code>",
712712
optionalVal: "-",
713-
default: "0"
714-
} */
713+
default: "1",
714+
},
715715
],
716716
columns: columnsType1,
717717
},

examples/src/docs/zh/ve-table/api/db.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -711,13 +711,13 @@ export const db = {
711711
optionalVal: "-",
712712
default: "-",
713713
},
714-
/* {
715-
param: "bufferScale",
716-
desc: `缓冲比例。可视范围数据的整数倍,防止滚动过快白屏,默认无缓冲`,
714+
{
715+
param: "bufferCount",
716+
desc: `缓冲渲染数量。默认只渲染当前容器高度内的行数据,缓冲数据可以额外渲染行数据,可以有效解决合并过多行数据的问题`,
717717
type: "<code>Number</code>",
718718
optionalVal: "-",
719-
default: "0"
720-
} */
719+
default: "1",
720+
},
721721
],
722722
columns: columnsType1,
723723
},

packages/ve-table/src/index.jsx

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,7 @@ export default {
143143
virual scroll option
144144
{
145145
enable:true,
146-
isFixedRowHeight:false, // 如果为 true 使用 rowHeight,否则使用 minRowHeight
147-
fixedRowHeight:40,
146+
bufferCount:10, // 缓冲的数据
148147
minRowHeight:40,
149148
scrolling:(startRowIndex,visibleStartIndex,visibleEndIndex,visibleAboveCount,visibleBelowCount)=>{}
150149
}
@@ -353,6 +352,24 @@ export default {
353352

354353
return result;
355354
},
355+
// virtual scroll buffer count
356+
virtualScrollBufferCount() {
357+
const { virtualScrollOption, defaultVirtualScrollBufferCount } =
358+
this;
359+
360+
let result = defaultVirtualScrollBufferCount;
361+
if (virtualScrollOption) {
362+
const { bufferCount } = virtualScrollOption;
363+
if (
364+
isNumber(bufferCount) &&
365+
bufferCount > defaultVirtualScrollBufferCount
366+
) {
367+
result = bufferCount;
368+
}
369+
}
370+
371+
return result;
372+
},
356373
// virtual scroll visible count
357374
virtualScrollVisibleCount() {
358375
let result = 0;
@@ -1125,14 +1142,14 @@ export default {
11251142
// get virtual scroll above count
11261143
getVirtualScrollAboveCount() {
11271144
let result = 0;
1128-
const { isVirtualScroll, defaultVirtualScrollBufferCount } = this;
1145+
const { isVirtualScroll, virtualScrollBufferCount } = this;
11291146

11301147
const virtualScrollStartIndex = this.virtualScrollStartIndex;
11311148

11321149
if (isVirtualScroll) {
11331150
result = Math.min(
11341151
virtualScrollStartIndex,
1135-
defaultVirtualScrollBufferCount,
1152+
virtualScrollBufferCount,
11361153
);
11371154
}
11381155
return result;
@@ -1142,18 +1159,15 @@ export default {
11421159
getVirtualScrollBelowCount() {
11431160
let result = 0;
11441161

1145-
const {
1146-
isVirtualScroll,
1147-
tableData,
1148-
defaultVirtualScrollBufferCount,
1149-
} = this;
1162+
const { isVirtualScroll, tableData, virtualScrollBufferCount } =
1163+
this;
11501164

11511165
const virtualScrollEndIndex = this.virtualScrollEndIndex;
11521166

11531167
if (isVirtualScroll) {
11541168
result = Math.min(
11551169
tableData.length - virtualScrollEndIndex,
1156-
defaultVirtualScrollBufferCount,
1170+
virtualScrollBufferCount,
11571171
);
11581172
}
11591173

tests/unit/specs/ve-table-virtual-scroll.spec.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,54 @@ describe("veTable virtual scroll", () => {
248248
);
249249
});
250250

251+
it("buffer count", async () => {
252+
const bufferCount = 10;
253+
254+
const wrapper = mount(veTable, {
255+
propsData: {
256+
columns: [
257+
{
258+
field: "name",
259+
key: "b",
260+
title: "Name",
261+
width: 200,
262+
align: "left",
263+
},
264+
{
265+
field: "hobby",
266+
key: "c",
267+
title: "Hobby",
268+
width: 300,
269+
align: "left",
270+
},
271+
{
272+
field: "address",
273+
key: "d",
274+
title: "Address",
275+
width: "",
276+
align: "left",
277+
},
278+
],
279+
tableData: TABLE_DATA_DIFFERENT_ROW_HEIGHT,
280+
virtualScrollOption: {
281+
// 是否开启
282+
enable: true,
283+
bufferCount: bufferCount,
284+
},
285+
maxHeight: MAX_HEIGHT,
286+
rowKeyFieldName: "rowKey",
287+
},
288+
});
289+
290+
wrapper.triggerResizeObserver({ width: MAX_HEIGHT });
291+
292+
await later();
293+
294+
expect(wrapper.findAll(".ve-table-body-tr").length).toBe(
295+
Math.ceil(MAX_HEIGHT / MIN_ROW_HEIGHT) + bufferCount,
296+
);
297+
});
298+
251299
it("with row checkbox", async () => {
252300
const wrapper = mount(veTable, {
253301
propsData: {

0 commit comments

Comments
 (0)