看长帖不想动手?用这行代码

6 阅读1分钟

适用场景 看长文、小说或长贴时,解放双手,让浏览器自动向下滚动。

操作方法 打开浏览器控制台 -> 找到 Console -> 粘贴代码并回车,即可启动自动滚动。

(() => {
  // 如果之前跑过,先停掉旧脚本
  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();
})();

过程控制 在 Console 继续输入以下命令可控制滚动:

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