页面滚动到指定位置

511 阅读1分钟

页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .con {
            height: 1000px;
            margin: 10px;
            background-color: aqua;
        }
    </style>
</head>
<body>
<button onclick="go()">定位</button>
<div class="con">
    <span id="1">1</span>
</div>
<div class="con">
    <span id="2">2</span>
</div>
<div class="con">
    <span id="3">3</span>
</div>
<div class="con">
    <span id="4">4</span>
</div>
<div class="con">
    <span id="5">5</span>
</div>

绘制了5个高度为1000px的长方形,点击按钮实现跳转到指定位置

scrollTo实现

function go() {
        let aTags = document.querySelectorAll("span");
        console.log(aTags);
        let top;
        let currentTop;
        for (let i = 0; i < aTags.length; i++) {
            if (aTags[i].innerText === '5') {
                top = aTags[i].offsetTop;
                currentTop = window.scrollY; //所在的位置
                console.log(top);
                console.log(currentTop);
                window.scrollTo(0, top)
            }
        }
    }

scrollIntoView实现

function go() {
        let aTags = document.querySelectorAll("span");
        console.log(aTags);
        let top;
        let currentTop;
        for (let i = 0; i < aTags.length; i++) {
            if (aTags[i].innerText === '5') {
                top = aTags[i].offsetTop;
                currentTop = window.scrollY; //所在的位置
                console.log(top);
                console.log(currentTop);
                aTags[i].scrollIntoView();
            }
        }
    }

使用总结

当页面存在多层dom嵌套,滚动条的高度并不是页面的最外层的滚动条时,第一种方法可能失效,第二种方法可以规避此问题,但兼容性相对较差,具体见下图。

参考资料

developer.mozilla.org/zh-CN/docs/…