c77fdfbb839f8e8fcf875e5ec7a36a9b8b20d1cf40f5ca8bc92afbb330c733183ade3d68dd04f4835922de28506439d68d0bd3dff2c1646c80ef70fca97a32 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var buildList = require('../builders/build-list.js');
  4. var utils = require('../utils.js');
  5. var defaults = require('../defaults.js');
  6. const FixedSizeList = buildList["default"]({
  7. name: "ElFixedSizeList",
  8. getItemOffset: ({ itemSize }, index) => index * itemSize,
  9. getItemSize: ({ itemSize }) => itemSize,
  10. getEstimatedTotalSize: ({ total, itemSize }) => itemSize * total,
  11. getOffset: ({ height, total, itemSize, layout, width }, index, alignment, scrollOffset) => {
  12. const size = utils.isHorizontal(layout) ? width : height;
  13. const lastItemOffset = Math.max(0, total * itemSize - size);
  14. const maxOffset = Math.min(lastItemOffset, index * itemSize);
  15. const minOffset = Math.max(0, (index + 1) * itemSize - size);
  16. if (alignment === defaults.SMART_ALIGNMENT) {
  17. if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {
  18. alignment = defaults.AUTO_ALIGNMENT;
  19. } else {
  20. alignment = defaults.CENTERED_ALIGNMENT;
  21. }
  22. }
  23. switch (alignment) {
  24. case defaults.START_ALIGNMENT: {
  25. return maxOffset;
  26. }
  27. case defaults.END_ALIGNMENT: {
  28. return minOffset;
  29. }
  30. case defaults.CENTERED_ALIGNMENT: {
  31. const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);
  32. if (middleOffset < Math.ceil(size / 2)) {
  33. return 0;
  34. } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {
  35. return lastItemOffset;
  36. } else {
  37. return middleOffset;
  38. }
  39. }
  40. case defaults.AUTO_ALIGNMENT:
  41. default: {
  42. if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {
  43. return scrollOffset;
  44. } else if (scrollOffset < minOffset) {
  45. return minOffset;
  46. } else {
  47. return maxOffset;
  48. }
  49. }
  50. }
  51. },
  52. getStartIndexForOffset: ({ total, itemSize }, offset) => Math.max(0, Math.min(total - 1, Math.floor(offset / itemSize))),
  53. getStopIndexForStartIndex: ({ height, total, itemSize, layout, width }, startIndex, scrollOffset) => {
  54. const offset = startIndex * itemSize;
  55. const size = utils.isHorizontal(layout) ? width : height;
  56. const numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize);
  57. return Math.max(0, Math.min(total - 1, startIndex + numVisibleItems - 1));
  58. },
  59. initCache() {
  60. return void 0;
  61. },
  62. clearCache: true,
  63. validateProps() {
  64. }
  65. });
  66. exports["default"] = FixedSizeList;
  67. //# sourceMappingURL=fixed-size-list.js.map