element.scrollTo Safari 中的可滑动滚动容器中的平滑滚动不起作用

element.scrollTo smooth scrolling not working in Safari in snappable scrollable container

我正在创建一个缩略图滑块并想使用对齐滚动和 scrollTo。当我 select 缩略图时,我希望另一个可滚动容器滚动到具有此缩略图链接到的 id 的图像。我希望滚动可见,而不仅仅是“跳转”到图像。这一切在 Firefox、Chrome 和其他人中都可以正常工作。

但是,我知道 scrollTo 在 Safari 14.7 之前的支持有限,但即使在最新版本中我也无法重新创建平滑的滚动行为。 https://caniuse.com/?search=scrollto

我创建了一个 CodePen 来演示我的问题 https://codepen.io/Bregt/pen/jOwJGMJ

我将以下 CSS 添加到我的水平滚动容器中。

.h {
    display: flex;
    overflow-x: auto;
    overflow-y: hidden;
    overscroll-behavior-x: contain;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    width: 200px;
}

.h > * {
    width: 100%;
    flex-shrink: 0;
    scroll-snap-align: start;
    scroll-snap-stop: always;
}

在我的JavaScript中,我获取具有特定ID的元素,然后在容器上使用scrollTo

document.querySelector(".js-h-slide").addEventListener("click", (e) => {
  let element = document.getElementById("h-image-5");  
  document.querySelector(".js-h-slides").scrollTo({
    left: element.offsetLeft,
    behavior: "smooth"
  })
});

我忘记了什么?

这种行为显然是可能的,但背后有一个标志。我对 Can I Use about scrollTo 中提到的内容感到困惑。

这是我在 WebKit 上找到的信息 http://bugs.webkit.org/show_bug.cgi?id=188043

最后,我使用了动态导入的'smoothscroll-polyfill' polyfill。 (https://github.com/iamdustan/smoothscroll) :(

if (!('scrollBehavior' in document.documentElement.style)) {
    import('smoothscroll-polyfill').then((module) => {
        module.polyfill();
    }).then(() => {
        ...
    });
}