平滑滚动翻页

使用w和s键进行平滑滚动翻页。键盘左右键或A/D键模拟点击页面中【上一页|上一章】【下一页|下一章】按钮,双击只点击【上一章】【下一章】按

目前为 2025-04-14 提交的版本。查看 最新版本

// ==UserScript==
// @name         平滑滚动翻页
// @namespace    http://tampermonkey.net/
// @version      1.6
// @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 ? '上一章' : '下一章');
                }
                clickTimer = null;
            }, 300);
        } else {
            clearTimeout(clickTimer);
            clickTimer = null;
            simulateClickByText(direction === 'prev' ? '上一章' : '下一章');
        }
    }

    // 页面加载完毕后执行
    window.addEventListener('load', function() {
        initialize();
    });

    // 窗口获取焦点时初始化(仅第一次)
    window.addEventListener('focus', function() {
        initialize();
    });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址