偶然中文快捷翻页脚本

按下键盘左右键或ad键进行上一页下一页切换,双击按键进行上下章节切换;按下键盘上下键或ws键进行页面内滚动;按下g键加入书签;自动刷新未加载的网页

目前为 2024-06-12 提交的版本。查看 最新版本

// ==UserScript==
// @name         偶然中文快捷翻页脚本
// @namespace    http://tampermonkey.net/
// @version      0.8
// @description  按下键盘左右键或ad键进行上一页下一页切换,双击按键进行上下章节切换;按下键盘上下键或ws键进行页面内滚动;按下g键加入书签;自动刷新未加载的网页
// @author       coccvo
// @match        *://www.or77.net/*
// @icon        data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAB60lEQVR42m2SyUtbURTGT0tXbbF/QaGULoJd2C66kLYKom4UBQVnECcQMbpwEUWCA4a4CahIIk5RUYTgTkF04YSKIA44PVDEIULACVEDMUafv/AeiYqPj8c99/6+c88994r61ldamIveXJJXsff2tiAzedcliAEhky6XKz0qvjSviPCF4fL8ND8tBlTdFLTf8oGwq9ue/z56TxqWpApP2HB47M5KiDzrE3XqnXfW6p2zMsDTnGECxYBSDLG6QVGUnJhvXocA+Vad2iSD4YHG5ZWtg9gePOxDbcLCwuJCWfRn1SYPI1/8+2OhPVcqymc6HRd3j3jYx2g0Mink1mjfsOHueOM5Pf9Drso/4uEYDGoiPwEL7dPoh6uTIBhwq6eO3apiaHea8B9KSqSEI7sBD7BQujNb6hoa9cz3E3DLX1/Q9MNUXQ0GLNTXZLGEDOSGVv7I+k/p/y0cGgPth0HAAkSMIUSDarStRJYmHL7AI0sAYPpNezwe4pvtaWgtvd0g0FwCTQsZwMIGU62ZQyupf8nd+l0oN3gnvYKBtsIAhA1ch7O2kncxOdhmzf43WyGqTRfbuq9VPH1NZjDdwCNbs/xCO+3//WNxJA5rNM4/XoACHVFguoHu1idHoLrMoMxFEeYyxECf0Va1B/8EoujxAC7mNZQAAAAASUVORK5CYII=
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // 自动点击刷新
    function checkAndReload() {
         var refreshDiv = document.querySelector('div[style="font-size:26px; color:#00F; cursor:hand; text-align:center;"][onclick="location.reload();"]');
        if (refreshDiv) {
            console.log("Refresh div found. Reloading the page...");
            location.reload();
        } else {
             console.log("Refresh div not found.");
        }
    }
    window.addEventListener('load', checkAndReload);
    document.addEventListener('visibilitychange', function() {
        if (document.visibilityState === 'visible') {
            checkAndReload();
        }
    });


    // 模拟点击函数
    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;
            }
        }
    }

    // 模拟点击书签函数
    function simulateBookmarkClick() {
        // 查找具有特定文本内容的<span>元素
        const bookmarkButton = document.querySelector('span[onclick*="AddShuQian"]');
        if (bookmarkButton) {
            console.log('Bookmark button found:', bookmarkButton);
            bookmarkButton.click();
        } else {
            console.log('Bookmark button not found.');
        }
    }

    const SCROLL_FRACTION = 0.9; // 设置滚动距离为视口高度的百分比

    document.addEventListener('keydown', function(e) {
        // 定义一个数组包含需要处理的按键
        const keysToHandle = ['ArrowUp', 'ArrowDown', 'w', 's'];

        // 检查按键是否在需要处理的列表中
        if (keysToHandle.includes(e.key)) {
            // 计算滚动距离
            let distance = e.key === 'ArrowDown' || e.key === 's' ? window.innerHeight * SCROLL_FRACTION : -window.innerHeight * SCROLL_FRACTION;

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

            // 阻止按键的默认行为,以允许脚本完全控制滚动(这将改变上下箭头的默认滚动行为)
            e.preventDefault();
        }
    }, false);

    // 双击检测变量
    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('下一章');
            }
        }
        // 'g' 键(收藏书签)
        else if (e.key === 'g') {
            simulateBookmarkClick();
        }
    });
})();