in client/src/components/scroll-list/scroll-list.ts [329:360]
private getItemIndexFromScrollPosition(scrollPosition: number, currentIndex: number = -1): number {
if (!this.scrollContent) {
return 0;
}
const scrollContainer = this.hostElement.nativeElement;
const scrollContent = this.scrollContent.nativeElement;
const centerPosition = -scrollPosition + scrollContainer.clientWidth * 0.5;
let nearestOffsetX = 0;
let nearestIndex = -1;
const items = scrollContent.getElementsByTagName('li');
for (let k = 0; k < items.length; k++) {
const child = items[k];
let childLeft = child.offsetLeft;
let childRight = child.offsetLeft + child.clientWidth;
if (k === currentIndex) {
childLeft -= this.config.snapStickyDistance;
childRight += this.config.snapStickyDistance;
}
if (centerPosition >= childLeft && centerPosition <= childRight) {
// center position is within child bounds
nearestIndex = k;
break;
}
const childCenterX = child.offsetLeft + child.clientWidth * 0.5;
const childOffsetX = centerPosition - childCenterX;
if (nearestIndex < 0 || Math.abs(childOffsetX) < Math.abs(nearestOffsetX)) {
nearestIndex = k;
nearestOffsetX = childOffsetX;
}
}
return nearestIndex;
}