如何在 Internet Explorer 11 中保持垂直居中的同时滚动到某个元素?

How to scroll to an element while keeping it vertically centered in Internet Explorer 11?

假设我在父容器中有一个元素。我想滚动到那个元素,同时保持它在父容器中垂直居中。我编写了以下适用于除 IE11 之外的所有浏览器的函数:

// Function for scrolling to an element, and placing it in the middle of the view
// By default, the container parameter is set to the browser window
function scrollIntoViewMiddle(element, container) {
    if (container === undefined) {
        container = window;
    }
    var elementRect = element.getBoundingClientRect();
    var absoluteElementTop = elementRect.top;
    var middleDiff = (elementRect.height / 2);
    var scrollTopOfElement = absoluteElementTop + middleDiff;
    var scrollY = scrollTopOfElement - (window.innerHeight / 2);
    container.scrollTo(0, scrollY);
}

不幸的是,这在 IE11 上不起作用,因为 scrollTo() 不是定义的函数或其他任何东西。什么是替代方法?有没有办法在 IE11 中做到这一点?

因为the scrollTo method doesn't support IE browser, we could set the Element.scrollLeft property and Element.scrollTop属性实现了同样的效果。

请参考以下示例代码:

<script>
    function scrollWin() {
        var con = document.getElementById("container");
        var el = document.getElementById("goose");
        scrollIntoViewMiddle(el, con);
    }

    function scrollIntoViewMiddle(element, container) {
        if (container === undefined) {
            container = window;
        }
        var elementRect = element.getBoundingClientRect();
        var absoluteElementTop = elementRect.top;
        var middleDiff = (elementRect.height / 2);
        var scrollTopOfElement = absoluteElementTop + middleDiff;
        var scrollY = (scrollTopOfElement - (container.getBoundingClientRect().height / 2));
        //container.scrollTo(0, scrollY);
        container.scrollLeft = 0;
        container.scrollTop = scrollY;
    }
</script>

Html 资源和 CSS 风格:

<style>
    .scrollContainer {
        overflow-y: auto;
        max-height: 100px;
        position: relative;
        border: 1px solid red;
        width: 120px;
    }

    .box {
        margin: 5px;
        background-color: yellow;
        height: 25px;
        display: flex;
        align-items: center;
        justify-content: center;
    }

    #goose {
        background-color: lime;
    }
</style>
<div id="container" class="scrollContainer">
    <div class="box">duck</div>
    <div class="box">duck</div>
    <div class="box">duck</div>
    <div class="box">duck</div>
    <div class="box">duck</div>
    <div class="box">duck</div>
    <div class="box">duck</div>
    <div class="box">duck</div>
    <div id="goose" class="box">goose</div>
    <div class="box">duck</div>
    <div class="box">duck</div>
    <div class="box">duck</div>
    <div class="box">duck</div>
    <div class="box">duck</div>
    <div class="box">duck</div>
    <div class="box">duck</div>
    <div class="box">duck</div>
</div>
<button onclick="scrollWin()">Click me to scroll</button><br><br>

结果如下所示: