(() => {
// 如果之前跑过,先停掉旧脚本
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,代码贴进去回车就好了
- 暂停: __autoScrollCtl.pause()
- 继续: __autoScrollCtl.resume()
- 停止: __autoScrollCtl.stop()
- 查看状态: __autoScrollCtl.status()
5 个帖子 - 4 位参与者