'use strict';
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
require('../../../../utils/index.js');
|
var buildList = require('../builders/build-list.js');
|
var utils = require('../utils.js');
|
var defaults = require('../defaults.js');
|
var shared = require('@vue/shared');
|
var error = require('../../../../utils/error.js');
|
|
const FixedSizeList = buildList["default"]({
|
name: "ElFixedSizeList",
|
getItemOffset: ({ itemSize }, index) => index * itemSize,
|
getItemSize: ({ itemSize }) => itemSize,
|
getEstimatedTotalSize: ({ total, itemSize }) => itemSize * total,
|
getOffset: ({ height, total, itemSize, layout, width }, index, alignment, scrollOffset) => {
|
const size = utils.isHorizontal(layout) ? width : height;
|
if (process.env.NODE_ENV !== "production" && shared.isString(size)) {
|
error.throwError("[ElVirtualList]", `
|
You should set
|
width/height
|
to number when your layout is
|
horizontal/vertical
|
`);
|
}
|
const lastItemOffset = Math.max(0, total * itemSize - size);
|
const maxOffset = Math.min(lastItemOffset, index * itemSize);
|
const minOffset = Math.max(0, (index + 1) * itemSize - size);
|
if (alignment === defaults.SMART_ALIGNMENT) {
|
if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {
|
alignment = defaults.AUTO_ALIGNMENT;
|
} else {
|
alignment = defaults.CENTERED_ALIGNMENT;
|
}
|
}
|
switch (alignment) {
|
case defaults.START_ALIGNMENT: {
|
return maxOffset;
|
}
|
case defaults.END_ALIGNMENT: {
|
return minOffset;
|
}
|
case defaults.CENTERED_ALIGNMENT: {
|
const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);
|
if (middleOffset < Math.ceil(size / 2)) {
|
return 0;
|
} else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {
|
return lastItemOffset;
|
} else {
|
return middleOffset;
|
}
|
}
|
case defaults.AUTO_ALIGNMENT:
|
default: {
|
if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {
|
return scrollOffset;
|
} else if (scrollOffset < minOffset) {
|
return minOffset;
|
} else {
|
return maxOffset;
|
}
|
}
|
}
|
},
|
getStartIndexForOffset: ({ total, itemSize }, offset) => Math.max(0, Math.min(total - 1, Math.floor(offset / itemSize))),
|
getStopIndexForStartIndex: ({ height, total, itemSize, layout, width }, startIndex, scrollOffset) => {
|
const offset = startIndex * itemSize;
|
const size = utils.isHorizontal(layout) ? width : height;
|
const numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize);
|
return Math.max(0, Math.min(total - 1, startIndex + numVisibleItems - 1));
|
},
|
initCache() {
|
return void 0;
|
},
|
clearCache: true,
|
validateProps() {
|
}
|
});
|
|
exports["default"] = FixedSizeList;
|
//# sourceMappingURL=fixed-size-list.js.map
|