偶然中文快捷翻页脚本

使用键盘左右键或ad键进行上下页切换,双击进行章节跳转。键盘上下键或ws键进行页面内滚动。

目前為 2024-05-18 提交的版本,檢視 最新版本

// ==UserScript==
// @name         偶然中文快捷翻页脚本
// @namespace    http://tampermonkey.net/
// @version      0.4
// @description  使用键盘左右键或ad键进行上下页切换,双击进行章节跳转。键盘上下键或ws键进行页面内滚动。
// @author       coccvo
// @match        *://www.or77.net/*
// @icon        https://www.or77.net/favicon.ico
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // 模拟点击函数
    function simulateClickByText(textContent) {
        // 查找所有<a>标签
        const links = document.querySelectorAll('a');
        // 遍历每个<a>标签
        for (let i = 0; i < links.length; i++) {
            // 如果文本内容匹配,则模拟点击
            if (links[i].textContent.trim() === textContent) {
                links[i].click();
                break;
            }
        }
    }

    const SCROLL_FRACTION = 0.8;  // 设置滚动距离为视口高度的百分比,用于控制每次按键滚动多少。更小的值表示每次滚动更少。

    //监听键盘事件
    document.addEventListener('keydown', function(e) {
        // 如果按键发生在输入框或文本域内,不执行滚动操作
        if (e.target.tagName.toLowerCase() === 'input' ||
            e.target.tagName.toLowerCase() === 'textarea') {
            return;
        }

        let distance;// 初始化滚动距离
        switch(e.key) {
            case 'ArrowDown':
            case 's':
                // 向下滚动视口高度的部分距离
                distance = window.innerHeight * SCROLL_FRACTION;
                smoothScroll(distance, 'down');
                break;
            case 'ArrowUp':
            case 'w':
                // 向上滚动视口高度的部分距离
                distance = -window.innerHeight * SCROLL_FRACTION;
                smoothScroll(distance, 'up');
                break;
            default:
        }
    }, false);

    // 定义平滑滚动
    function smoothScroll(distance, direction) {
        if ('scrollBehavior' in document.documentElement.style) {
            window.scrollBy({
                top: distance,
                left: 0,
                behavior: 'smooth'
            });
        } else {
            window.scrollBy(0, distance);
        }
    }

    // 双击检测变量
    let clickTimer = null;

    // 监听键盘事件
    document.addEventListener('keydown', function(e) {
        // 左键或 'a' 键(上一页)
    if (e.key === 'ArrowLeft' || e.key === 'a') {
            if (clickTimer == null) {
                clickTimer = setTimeout(function() {
                    simulateClickByText('上一页');
                    clickTimer = null;
                }, 300);
            } else {
                clearTimeout(clickTimer);
                clickTimer = null;
                simulateClickByText('上一章');
            }
        }
       // 右键或 'd' 键(下一页)
    else if (e.key === 'ArrowRight' || e.key === 'd') {
            if (clickTimer == null) {
                clickTimer = setTimeout(function() {
                    simulateClickByText('下一页');
                    clickTimer = null;
                }, 300);
            } else {
                clearTimeout(clickTimer);
                clickTimer = null;
                simulateClickByText('下一章');
            }
        }
    });
})();