# 滚动到指定元素

基于 JQuery

# 代码

import $ from "jquery";

/**
 * @desc 滚动到指定元素
 * @prop {string} targetElementId 目标元素的id
 * @prop {string?} containerId 容器id, 不传默认使用body
 * @prop {number?} offsetTop 滚动位置偏移(滚动后,距离窗口顶部的距离)
 */
function scrollToElement({ targetElementId, containerId, offsetTop = 0 } = {}) {
  try {
    // 这个对象只是用来使用 jQuery 的滚动动画
    const $scrollContainer = containerId
      ? $(`#${containerId}`)
      : $("html,body");

    // 滚动容器节点
    const elContainer = containerId
      ? document.getElementById(containerId)
      : document.getElementsByTagName("body")[0];

    // 目标节点
    const elTarget = document.getElementById(targetElementId);
    // 滚动容器相对于可视区的 y 坐标
    const parentY = elContainer.getBoundingClientRect().top;
    // 当前卷入高度
    const currScrollTop = elContainer.scrollTop;
    // 目标节点相对于可视区的 y 坐标
    const targetY = elTarget.getBoundingClientRect().top;
    // 要滚动到的位置
    const targetScrollTop = targetY - parentY + currScrollTop - offsetTop;

    $scrollContainer.animate({ scrollTop: targetScrollTop });
  } catch (err) {
    console.error("滚动失败", err);
  }
}

# 使用

scrollToElement({ targetElementId: "content-container", offsetTop: 100 });
Last Updated: 4/27/2021, 2:17:52 PM