Browse Source

无JIRA任务 rowHeight支持一下传function

research/test
guy 1 year ago
parent
commit
2668c807be
  1. 22
      packages/fineui/src/base/list/virtualgrouplist.js

22
packages/fineui/src/base/list/virtualgrouplist.js

@ -17,7 +17,7 @@ export class VirtualGroupList extends Widget {
overscanHeight: 100, overscanHeight: 100,
blockSize: 10, blockSize: 10,
scrollTop: 0, scrollTop: 0,
rowHeight: "auto", rowHeight: "auto", // 'auto' 或 数值 或function
items: [], items: [],
el: {}, el: {},
itemFormatter: (item, index) => item, itemFormatter: (item, index) => item,
@ -97,7 +97,7 @@ export class VirtualGroupList extends Widget {
} }
_isAutoHeight() { _isAutoHeight() {
return !isNumber(this.options.rowHeight); return this.options.rowHeight === 'auto';
} }
_renderMoreIf() { _renderMoreIf() {
@ -163,7 +163,7 @@ export class VirtualGroupList extends Widget {
itemsArr.push(items[j]); itemsArr.push(items[j]);
} }
} }
this.container.element.height(rowHeight * items.length - topHeight); this.container.element.height(this.summaryHeight - topHeight);
this.container.populate( this.container.populate(
itemsArr.map((item, i) => itemFormatter(item, (start < 0 ? 0 : start) * blockSize + i)) itemsArr.map((item, i) => itemFormatter(item, (start < 0 ? 0 : start) * blockSize + i))
); );
@ -180,6 +180,16 @@ export class VirtualGroupList extends Widget {
Math.ceil(this.options.items.length / blockSize), Math.ceil(this.options.items.length / blockSize),
this._isAutoHeight() ? 0 : rowHeight * blockSize this._isAutoHeight() ? 0 : rowHeight * blockSize
); );
if (isFunction(rowHeight)) {
for (let i = 0; i < this.options.items.length / blockSize; i++) {
const index = i * blockSize;
let summaryHeight = 0;
for (let j = index; j < index + blockSize && j < this.options.items.length; j++) {
summaryHeight += rowHeight(j, this.options.items[j]);
}
this.tree.set(i, summaryHeight);
}
}
this._calculateBlocksToRender(); this._calculateBlocksToRender();
try { try {
@ -188,7 +198,13 @@ export class VirtualGroupList extends Widget {
} }
_restore() { _restore() {
const o = this.options;
this.renderedIndex = -1; this.renderedIndex = -1;
if (isFunction(o.rowHeight)) {
this.summaryHeight = BI.sum(o.items, o.rowHeight);
} else {
this.summaryHeight = this._isAutoHeight() ? 0 : o.rowHeight * o.items.length;
}
// 依赖于cache的占位元素也要初始化 // 依赖于cache的占位元素也要初始化
this.topBlank.setHeight(0); this.topBlank.setHeight(0);
this.bottomBlank.setHeight(0); this.bottomBlank.setHeight(0);

Loading…
Cancel
Save