javascript - 使用 Javascript 滚动网页,其滚动在页面中间触发

标签 javascript html selenium scroll dom-events

我遇到过一些底部有页脚的网站,当我滚动到页脚上方的区域时,实际上会发生滚动。

要自动滚动这些页面,但我的代码目前的问题是它位于页面底部,我直接到达页脚,因此页脚上方的滚动触发器不会被触发。

有什么办法可以达到同样的效果吗?

这是我当前尝试从控制台执行的操作:

(function() {
    var intervalObj = null;
    var retry = 0;
    var clickHandler = function() { 
        console.log("Clicked; stopping autoscroll");
        clearInterval(intervalObj);
        document.body.removeEventListener("click", clickHandler);
    }
    function scrollDown() { 
        var scrollHeight = document.body.scrollHeight,
            scrollTop = document.body.scrollTop,
            innerHeight = window.innerHeight,
            difference = (scrollHeight - scrollTop) - innerHeight

        if (difference > 0) { 
            window.scrollBy(0, difference);
            if (retry > 0) { 
                retry = 0;
            }
            console.log("scrolling down more");
        } else {
            if (retry >= 3) {
                console.log("reached bottom of page; stopping");
                clearInterval(intervalObj);
                document.body.removeEventListener("click", clickHandler);
            } else {
                console.log("[apparenty] hit bottom of page; retrying: " + (retry + 1));
                retry++;
            }
        }
    }

    document.body.addEventListener("click", clickHandler);

    intervalObj = setInterval(scrollDown, 1000);

})()

有很多网站都有此功能,您可以尝试一下相同的网站

https://www.zomato.com/bangalore/indiranagar-restaurants

注意:与此类似的问题并没有回答如何在页面的某个中间点滚动,而是直接将我带到页脚,因此这不是重复的

最佳答案

逻辑是保留到滚动条的中间,除非页面完全加载。我们可以稍微调整代码以实现滚动条的最后位置。试试这个:

 var scrollHeight = 0,
    newScrollHeight;
  do {
    window.scrollTo(0, document.body.scrollHeight / 2);
    newScrollHeight = document.body.scrollHeight / 2;
    if (newScrollHeight == scrollHeight) {
      break;
    } else {
      scrollHeight = newScrollHeight;
    }
  } while (true);

关于javascript - 使用 Javascript 滚动网页,其滚动在页面中间触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69439716/

相关文章:

javascript - 是不是类似于 Flow 中 TypeScript 的非空断言运算符?

javascript - 使用已解析的 JavaScript 数据加载 Javascript 变量

javascript - Bottle 不识别 Axios.js json post

javascript - 使用 vuejs 复制 insideHTML 输出值

javascript - 带逗号分隔符的 ng-repeat 输入

java - 如何强制 Selenium 在新窗口中打开链接?

javascript - $(...).autocomplete 不是一个函数

html - `<textarea>` 忽略 `width` 和 `height` 属性

selenium - 从 Jenkins 运行机器人框架测试时浏览器永远不会打开

selenium - 具有相同类型和 ID 的多个按钮