分享一个浏览器自动下滚的脚本

分享一个浏览器自动下滚的脚本
分享一个浏览器自动下滚的脚本
(() => {
  // 如果之前跑过,先停掉旧脚本
  if (window.__autoScrollCtl?.stop) {
    window.__autoScrollCtl.stop();
  }

  const STEP_PX = 260;        // 每次下滑距离
  const INTERVAL_MS = 1500;   // 每次间隔,约为之前的 1/3
  const SMOOTH = true;        // 是否平滑滚动
  const MAX_IDLE_TICKS = 20;  // 连续多少次几乎没动就认为到底了

  const scroller = document.scrollingElement || document.documentElement;

  let timer = null;
  let running = false;
  let lastTop = scroller.scrollTop;
  let idleTicks = 0;

  function tick() {
    const before = scroller.scrollTop;

    window.scrollBy({
      top: STEP_PX,
      left: 0,
      behavior: SMOOTH ? "smooth" : "auto",
    });

    setTimeout(() => {
      const after = scroller.scrollTop;
      const moved = Math.abs(after - before);

      if (moved < 5) {
        idleTicks += 1;
      } else {
        idleTicks = 0;
      }

      lastTop = after;

      if (idleTicks >= MAX_IDLE_TICKS) {
        console.log("[auto-scroll] 可能已经到底,自动暂停");
        pause();
      }
    }, Math.min(900, Math.max(300, INTERVAL_MS - 200)));
  }

  function start() {
    if (running) return;
    running = true;
    timer = setInterval(tick, INTERVAL_MS);
    console.log(
      `[auto-scroll] 已启动: ${STEP_PX}px / ${INTERVAL_MS}ms`
    );
  }

  function pause() {
    if (!running) return;
    clearInterval(timer);
    timer = null;
    running = false;
    console.log("[auto-scroll] 已暂停");
  }

  function resume() {
    if (running) return;
    idleTicks = 0;
    start();
  }

  function stop() {
    clearInterval(timer);
    timer = null;
    running = false;
    idleTicks = 0;
    console.log("[auto-scroll] 已停止");
  }

  window.__autoScrollCtl = {
    start,
    pause,
    resume,
    stop,
    status() {
      return {
        running,
        top: scroller.scrollTop,
        height: scroller.scrollHeight,
        viewport: window.innerHeight,
        stepPx: STEP_PX,
        intervalMs: INTERVAL_MS,
        idleTicks,
      };
    },
  };

  start();
})();

1、用在哪?
比如我看一篇长帖子、或者文章、或者小说,不想自己动手了,可以让浏览器自己下滚

2、怎么用
打开浏览器控制台,找到 console,代码贴进去回车就好了

image

  • 暂停: __autoScrollCtl.pause()
  • 继续: __autoScrollCtl.resume()
  • 停止: __autoScrollCtl.stop()
  • 查看状态: __autoScrollCtl.status()

5 个帖子 - 4 位参与者

阅读完整话题

来源: linux.do查看原文