private getItemIndexFromScrollPosition()

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;
  }