Skip to content

Commit 006b9b7

Browse files
authored
refactor: extract _maxVirtualIndexOffset getter (#7227)
1 parent 6efce67 commit 006b9b7

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

packages/component-base/src/virtualizer-iron-list-adapter.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ export class IronListAdapter {
8989
return this.lastVisibleIndex + this._vidxOffset;
9090
}
9191

92+
get _maxVirtualIndexOffset() {
93+
return this.size - this._virtualCount;
94+
}
95+
9296
__hasPlaceholders() {
9397
return this.__getVisibleElements().some((el) => el.__virtualizerPlaceholder);
9498
}
@@ -113,7 +117,7 @@ export class IronListAdapter {
113117
let targetVirtualIndex = Math.floor((index / this.size) * this._virtualCount);
114118
if (this._virtualCount - targetVirtualIndex < visibleElementCount) {
115119
targetVirtualIndex = this._virtualCount - (this.size - index);
116-
this._vidxOffset = this.size - this._virtualCount;
120+
this._vidxOffset = this._maxVirtualIndexOffset;
117121
} else if (targetVirtualIndex < visibleElementCount) {
118122
if (index < OFFSET_ADJUST_MIN_THRESHOLD) {
119123
targetVirtualIndex = index;
@@ -769,15 +773,16 @@ export class IronListAdapter {
769773

770774
/** @private */
771775
_adjustVirtualIndexOffset(delta) {
776+
const maxOffset = this._maxVirtualIndexOffset;
777+
772778
if (this._virtualCount >= this.size) {
773779
this._vidxOffset = 0;
774780
} else if (this.__skipNextVirtualIndexAdjust) {
775781
this.__skipNextVirtualIndexAdjust = false;
776782
} else if (Math.abs(delta) > 10000) {
777783
// Process a large scroll position change
778784
const scale = this._scrollTop / (this.scrollTarget.scrollHeight - this.scrollTarget.offsetHeight);
779-
const offset = scale * this.size;
780-
this._vidxOffset = Math.round(offset - scale * this._virtualCount);
785+
this._vidxOffset = Math.round(scale * maxOffset);
781786
} else {
782787
// Make sure user can always swipe/wheel scroll to the start and end
783788
const oldOffset = this._vidxOffset;
@@ -796,7 +801,6 @@ export class IronListAdapter {
796801
}
797802

798803
// Near end
799-
const maxOffset = this.size - this._virtualCount;
800804
if (this._scrollTop >= this._maxScrollTop && this._maxScrollTop > 0) {
801805
this._vidxOffset = maxOffset;
802806
if (oldOffset !== this._vidxOffset) {

0 commit comments

Comments
 (0)