public scrollTo()

in src/scroll/smooth-scrolling-algorithm.ts [35:78]


  public scrollTo(
    parent: Readonly<IScrollableContainer>,
    // tslint:disable-next-line
    _el: HTMLElement,
    referenceRect: ClientRect,
  ): void {
    // Animation function to transition a scroll on the `parent` from the
    // `original` value to the `target` value by calling `set.
    const animate = (delta: number, original: number, setter: (x: number) => void) => {
      if (delta === 0) {
        return;
      }
      const target = original + delta;
      const start = performance.now();
      const duration = (Math.abs(target - original) / this.scrollSpeed) * 1000;
      const run = (now: number) => {
        const progress = Math.min((now - start) / duration, 1);
        setter(this.smoothing(original, target, progress));

        if (progress < 1) {
          requestAnimationFrame(run);
        }
      };

      requestAnimationFrame(run);
    };

    const reference = parent.element.getBoundingClientRect();
    if (parent.horizontal) {
      animate(
        horizontalDelta(referenceRect, reference),
        parent.element.scrollLeft,
        x => (parent.element.scrollLeft = x),
      );
    }

    if (parent.vertical) {
      animate(
        verticalDelta(referenceRect, reference),
        parent.element.scrollTop,
        x => (parent.element.scrollTop = x),
      );
    }
  }