Linux.do 自动滚动到底部

在 linux.do 帖子页面右下角添加一个“翻至末尾”按钮,点击后自动滚动,直到页脚元素可见时停止。

当前为 2025-08-16 提交的版本,查看 最新版本

// ==UserScript==
// @name         Linux.do 自动滚动到底部
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  在 linux.do 帖子页面右下角添加一个“翻至末尾”按钮,点击后自动滚动,直到页脚元素可见时停止。
// @author       Gemini
// @match        https://linux.do/t/topic/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // 创建按钮
    const scrollToBottomButton = document.createElement('button');
    scrollToBottomButton.textContent = '翻至末尾';
    Object.assign(scrollToBottomButton.style, {
        position: 'fixed',
        bottom: '20px',
        right: '20px',
        zIndex: '9999',
        padding: '10px 15px',
        backgroundColor: '#007bff',
        color: 'white',
        border: 'none',
        borderRadius: '5px',
        cursor: 'pointer',
        boxShadow: '0 2px 5px rgba(0,0,0,0.2)'
    });
    document.body.appendChild(scrollToBottomButton);

    let scrollInterval = null;

    function isElementInViewport(el) {
        if (!el) {
            return false;
        }
        const rect = el.getBoundingClientRect();
        return (
            rect.top < (window.innerHeight || document.documentElement.clientHeight) &&
            rect.bottom >= 0
        );
    }

    scrollToBottomButton.addEventListener('click', () => {
        if (scrollInterval) {
            clearInterval(scrollInterval);
            scrollInterval = null;
            scrollToBottomButton.textContent = '翻至末尾';
            scrollToBottomButton.style.backgroundColor = '#007bff';
            return;
        }

        scrollToBottomButton.textContent = '滚动中...';
        scrollToBottomButton.style.backgroundColor = '#dc3545';

        scrollInterval = setInterval(() => {
            // 步骤1:滚动到当前文档底部
            window.scrollTo(0, document.body.scrollHeight);

            // --- 主要修改点 ---
            // 步骤2:等待一小段时间(例如 250 毫秒),让网站有时间加载新内容
            setTimeout(() => {
                // 如果在此期间用户点击了停止,就不再执行检查
                if (!scrollInterval) {
                    return;
                }
                
                // 步骤3:延迟之后,再检查页脚元素是否可见
                const footerElement = document.querySelector('#ember51');
                if (isElementInViewport(footerElement)) {
                    clearInterval(scrollInterval);
                    scrollInterval = null;
                    scrollToBottomButton.textContent = '已到底部';
                    scrollToBottomButton.style.backgroundColor = '#28a745';
                    console.log('检测到页脚,停止滚动。');

                    setTimeout(() => {
                        scrollToBottomButton.textContent = '翻至末尾';
                        scrollToBottomButton.style.backgroundColor = '#007bff';
                    }, 3000);
                }
            }, 250); // <-- 增加 250 毫秒的延迟

        }, 1000); // 滚动间隔保持 1 秒
    });
})();

QingJ © 2025

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