您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a scroll to top button to github
当前为
// ==UserScript== // @name GitHub Scroll To Top // @namespace http://tampermonkey.net/ // @version 2025-04-11 // @description Adds a scroll to top button to github // @author Charles Pritchard // @match https://github.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=github.com // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; const targetElementSelector = ".application-main"; const buttonClassName = "simple-scroll-top-button"; const scrollThreshold = 200; // Pixels to scroll before showing button let scrollButton = null; // Keep a reference to the button // Function to handle showing/hiding the button based on scroll function handleScroll() { if (!scrollButton) return; // Exit if button doesn't exist if (window.scrollY > scrollThreshold) { // Show button scrollButton.style.opacity = "1"; scrollButton.style.transform = "translateY(0)"; } else { // Hide button scrollButton.style.opacity = "0"; scrollButton.style.transform = "translateY(50px)"; // Move down } } function addButton() { if (document.querySelector(`.${buttonClassName}`)) { scrollButton = document.querySelector(`.${buttonClassName}`); // Ensure reference is set if already exists return; // Button already exists } const button = document.createElement("button"); button.textContent = "↑ Top"; button.className = buttonClassName; button.onclick = () => { window.scrollTo({ top: 0, behavior: "smooth" }); }; // Base styles button.style.position = "fixed"; button.style.bottom = "20px"; button.style.right = "20px"; button.style.zIndex = "9999"; button.style.padding = "8px 12px"; button.style.cursor = "pointer"; button.style.backgroundColor = "#222"; // Darker background button.style.color = "#eee"; // Lighter text button.style.border = "1px solid #555"; // Adjusted border button.style.borderRadius = "4px"; // Animation styles button.style.opacity = "0"; // Start hidden button.style.transform = "translateY(50px)"; // Start shifted down button.style.transition = "opacity 0.3s ease-out, transform 0.3s ease-out"; // Smooth transition document.body.appendChild(button); scrollButton = button; // Store reference console.log("Scroll Top button added (initially hidden)."); // Add scroll listener only once window.removeEventListener("scroll", handleScroll); // Remove previous just in case window.addEventListener("scroll", handleScroll, { passive: true }); // Check initial scroll position immediately handleScroll(); } const observer = new MutationObserver((mutationsList, observer) => { if (document.querySelector(targetElementSelector)) { addButton(); // Keep observer running? If GitHub SPA navigation removes/re-adds // .application-main, you might need the button added again. // If you only want it added once per full page load, disconnect. // observer.disconnect(); } }); const checkBodyInterval = setInterval(() => { if (document.body) { clearInterval(checkBodyInterval); // Initial check if (document.querySelector(targetElementSelector)) { addButton(); } else { // Start observing if target not found initially observer.observe(document.body, { childList: true, subtree: true, }); } } }, 100); })();