Greasy Fork is available in English.
使用w和s键进行平滑滚动翻页。键盘左右键或A/D键模拟点击页面中【上一页|上一章】【下一页|下一章】按钮,双击只点击【上一章】【下一章】按
当前为
// ==UserScript==
// @name 平滑滚动翻页
// @namespace http://tampermonkey.net/
// @version 1.7
// @description 使用w和s键进行平滑滚动翻页。键盘左右键或A/D键模拟点击页面中【上一页|上一章】【下一页|下一章】按钮,双击只点击【上一章】【下一章】按
// @author coccvo
// @include *
// @exclude https://www.bilibili.com/*
// @grant none
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAVdJREFUWEftlj1Ow0AQhd9YWKKmy3b8FPSpiKUojXMaKOAg0HAZCEUktB0HoMDu4twBkwxaLEvG7C7GzMoowvV437dvfnYIA3/k00+TgiX4Flo5df4BfuVABEx5yxuOSPtSFSQFRvxOq0cjPD9bTXwQ4gBN8frmPghRAJv4dxCCAPRCtH325Zs5OgX4pBkjCNBvKuwmAAMZgFvjSQQ6Z/Cxyx9xB8p4FC+X9NYUnM14Ly7XpQ1CFMAmXou6IMQACJTd69GnCm/fOE3WGcBHQbqAgasHrW58vTBPiksGrncTAEC+0MpZ7ebWaVLkAA6DOGAO9RXhePwUH+yr13aKxIqwPtgG4RI3/4gDVCCUE/hjEDFw0bY9WAr6vAaBHOiOIgjwB55j70IyXU1483U/FHSgst26kjnEg3XBoEtpXX6DruXdeyDYIOqOIF6E3aWryN4APxXqE/8OqY/0IehdmXQAAAAASUVORK5CYII=
// @license MIT
// ==/UserScript==
(function() {
'use strict';
let initialized = false;
let clickTimer = null;
// 模拟点击函数
function simulateClickByText(textContent) {
const links = document.querySelectorAll('a');
for (let i = 0; i < links.length; i++) {
if (links[i].textContent.trim() === textContent) {
links[i].click();
return true;
}
}
return false;
}
// 检测页面按钮
function hasNextPageButton() {
return simulateClickByText('下一页') || simulateClickByText('下一页>');
}
function hasLastPageButton() {
return simulateClickByText('上一页') || simulateClickByText('上一页>');
}
function initialize() {
if (initialized) return;
initialized = true;
let viewportHeight = window.innerHeight;
let scrollDistance = viewportHeight * 0.9;
// 监听按键事件
document.addEventListener('keydown', function(event) {
// 检查事件是否发生在输入框内部
const tag = event.target.tagName.toLowerCase();
if (tag === 'input' || tag === 'textarea') return;
switch(event.key.toLowerCase()) {
case 'w':
case 'arrowup':
event.preventDefault();
window.scrollBy({
top: -scrollDistance,
left: 0,
behavior: 'smooth'
});
break;
case 's':
case 'arrowdown':
event.preventDefault();
window.scrollBy({
top: scrollDistance,
left: 0,
behavior: 'smooth'
});
break;
case 'arrowleft':
case 'a':
handlePageNavigation('prev');
break;
case 'arrowright':
case 'd':
handlePageNavigation('next');
break;
}
});
}
// 处理页面导航
function handlePageNavigation(direction) {
if (clickTimer == null) {
clickTimer = setTimeout(() => {
const isPrev = direction === 'prev';
if (isPrev ? hasLastPageButton() : hasNextPageButton()) {
if (isPrev) {
simulateClickByText('上一页') || simulateClickByText('<上一页');
} else {
simulateClickByText('下一页') || simulateClickByText('下一页>');
}
} else {
simulateClickByText(isPrev ? '上一章' : '下一章');
}
document.body.focus();
clickTimer = null;
}, 300);
} else {
clearTimeout(clickTimer);
clickTimer = null;
simulateClickByText(direction === 'prev' ? '上一章' : '下一章');
document.body.focus();
}
}
// 页面加载完毕后执行
window.addEventListener('load', function() {
initialize();
});
// 窗口获取焦点时初始化(仅第一次)
window.addEventListener('focus', function() {
initialize();
});
})();