您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a floating button to scroll to the bottom, checkboxes to stay at the bottom, and to reload the page every 10, 15, 20, or 30 seconds on reddit-stream.com, with persistent settings and icons for clarity.
当前为
// ==UserScript== // @name Scroll to Bottom, Stay Button, and Auto-Reload with Persistence and Icons for reddit-stream.com // @namespace https://github.com/Nick2bad4u/UserStyles // @version 2.12 // @description Adds a floating button to scroll to the bottom, checkboxes to stay at the bottom, and to reload the page every 10, 15, 20, or 30 seconds on reddit-stream.com, with persistent settings and icons for clarity. // @author Nick2bad4u // @match *://*.reddit-stream.com/* // @grant none // @license Unlicense // @icon https://www.google.com/s2/favicons?sz=64&domain=reddit-stream.com // ==/UserScript== (function () { "use strict"; console.log( "Script initialized: Adding floating button, checkboxes, and persistence.", ); // Helper function for hover effect function handleHover(element) { element.addEventListener("mouseover", function () { element.style.opacity = "1"; }); element.addEventListener("mouseout", function () { element.style.opacity = "0.1"; }); console.log(`Hover effect applied to element: ${element}`); } // Function to save checkbox state function saveCheckboxState(key, value) { localStorage.setItem(key, value); console.log(`Saved checkbox state for ${key}: ${value}`); } // Function to load checkbox state function loadCheckboxState(key) { const state = localStorage.getItem(key) === "true"; console.log(`Loaded checkbox state for ${key}: ${state}`); return state; } // Styling for the checkboxes with hover title support for icons function styleCheckboxWrapper(wrapper, iconText, checkboxId, titleText) { wrapper.style.display = "flex"; wrapper.style.flexDirection = "column"; wrapper.style.alignItems = "center"; wrapper.style.position = "fixed"; wrapper.style.bottom = "20px"; wrapper.style.zIndex = "1000"; wrapper.style.cursor = "pointer"; wrapper.style.opacity = "0.1"; wrapper.style.transition = "opacity 0.3s"; const label = document.createElement("label"); label.htmlFor = checkboxId; label.style.cursor = "pointer"; const icon = document.createElement("div"); icon.innerHTML = iconText; icon.style.fontSize = "12px"; icon.style.color = "orange"; icon.style.marginTop = "5px"; icon.title = titleText; label.appendChild(icon); wrapper.appendChild(label); handleHover(wrapper); console.log( `Checkbox wrapper styled with icon: ${iconText} and title: ${titleText}`, ); } // Scroll-to-bottom button const button = document.createElement("button"); button.innerHTML = "⬇️"; button.style.position = "fixed"; button.style.bottom = "20px"; button.style.right = "20px"; // Changed from left to right button.style.zIndex = "1000"; button.style.padding = "10px"; button.style.borderRadius = "50%"; button.style.border = "none"; button.style.backgroundColor = "black"; button.style.color = "blue"; button.style.fontSize = "20px"; button.style.cursor = "pointer"; button.style.opacity = "0.5"; button.style.transition = "opacity 0.3s"; button.title = "Click to scroll to the bottom"; handleHover(button); button.addEventListener("click", function () { globalThis.scrollTo({ top: document.body.scrollHeight, behavior: "smooth", }); console.log("Scroll-to-bottom button clicked, scrolling to the bottom."); }); // Stay-at-bottom checkbox with icon const stayAtBottomWrapper = document.createElement("div"); stayAtBottomWrapper.style.right = "60px"; // Changed from left to right const stayAtBottomCheckboxId = "stayAtBottomCheckbox"; styleCheckboxWrapper( stayAtBottomWrapper, "🔽", stayAtBottomCheckboxId, "Check to stay at the bottom", ); const stayAtBottomCheckbox = document.createElement("input"); stayAtBottomCheckbox.type = "checkbox"; stayAtBottomCheckbox.id = stayAtBottomCheckboxId; stayAtBottomCheckbox.checked = loadCheckboxState("stayAtBottom"); stayAtBottomCheckbox.title = "Check to stay at the bottom"; stayAtBottomWrapper.insertBefore( stayAtBottomCheckbox, stayAtBottomWrapper.firstChild, ); stayAtBottomCheckbox.addEventListener("change", function () { saveCheckboxState("stayAtBottom", stayAtBottomCheckbox.checked); }); let scrollTimeout; const debounce = (fn, delay) => { return function () { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(fn, delay); }; }; const keepAtBottom = debounce(function () { if (stayAtBottomCheckbox.checked) { globalThis.scrollTo({ top: document.body.scrollHeight, behavior: "smooth", }); console.log("Auto-scrolling to the bottom (Stay at Bottom active)."); } else { console.log("Auto-scrolling stopped (Stay at Bottom inactive)."); } }, 200); const observer = new MutationObserver(keepAtBottom); observer.observe(document.body, { childList: true, subtree: true, }); console.log("MutationObserver started for staying at the bottom."); // Auto-reload every 10 seconds checkbox with icon const autoReload10Wrapper = document.createElement("div"); autoReload10Wrapper.style.right = "100px"; // Changed from left to right const autoReload10CheckboxId = "autoReload10Checkbox"; styleCheckboxWrapper( autoReload10Wrapper, "10s", autoReload10CheckboxId, "Check to reload every 10 seconds", ); const autoReload10Checkbox = document.createElement("input"); autoReload10Checkbox.type = "checkbox"; autoReload10Checkbox.id = autoReload10CheckboxId; autoReload10Checkbox.checked = loadCheckboxState("autoReload10"); autoReload10Checkbox.title = "Check to reload every 10 seconds"; autoReload10Wrapper.insertBefore( autoReload10Checkbox, autoReload10Wrapper.firstChild, ); let reloadInterval10; function startAutoReload10() { reloadInterval10 = setInterval(() => { globalThis.location.reload(); console.log("Page reloading every 10 seconds."); }, 10000); } if (autoReload10Checkbox.checked) startAutoReload10(); autoReload10Checkbox.addEventListener("change", function () { saveCheckboxState("autoReload10", autoReload10Checkbox.checked); if (autoReload10Checkbox.checked) { startAutoReload10(); } else { clearInterval(reloadInterval10); console.log("Stopped reloading every 10 seconds."); } }); // Auto-reload every 15 seconds checkbox with icon const autoReload15Wrapper = document.createElement("div"); autoReload15Wrapper.style.right = "140px"; // Changed from left to right const autoReload15CheckboxId = "autoReload15Checkbox"; styleCheckboxWrapper( autoReload15Wrapper, "15s", autoReload15CheckboxId, "Check to reload every 15 seconds", ); const autoReload15Checkbox = document.createElement("input"); autoReload15Checkbox.type = "checkbox"; autoReload15Checkbox.id = autoReload15CheckboxId; autoReload15Checkbox.checked = loadCheckboxState("autoReload15"); autoReload15Checkbox.title = "Check to reload every 15 seconds"; autoReload15Wrapper.insertBefore( autoReload15Checkbox, autoReload15Wrapper.firstChild, ); let reloadInterval15; function startAutoReload15() { reloadInterval15 = setInterval(() => { globalThis.location.reload(); console.log("Page reloading every 15 seconds."); }, 15000); } if (autoReload15Checkbox.checked) startAutoReload15(); autoReload15Checkbox.addEventListener("change", function () { saveCheckboxState("autoReload15", autoReload15Checkbox.checked); if (autoReload15Checkbox.checked) { startAutoReload15(); } else { clearInterval(reloadInterval15); console.log("Stopped reloading every 15 seconds."); } }); // Auto-reload every 20 seconds checkbox with icon const autoReload20Wrapper = document.createElement("div"); autoReload20Wrapper.style.right = "180px"; // Changed from left to right const autoReload20CheckboxId = "autoReload20Checkbox"; styleCheckboxWrapper( autoReload20Wrapper, "20s", autoReload20CheckboxId, "Check to reload every 20 seconds", ); const autoReload20Checkbox = document.createElement("input"); autoReload20Checkbox.type = "checkbox"; autoReload20Checkbox.id = autoReload20CheckboxId; autoReload20Checkbox.checked = loadCheckboxState("autoReload20"); autoReload20Checkbox.title = "Check to reload every 20 seconds"; autoReload20Wrapper.insertBefore( autoReload20Checkbox, autoReload20Wrapper.firstChild, ); let reloadInterval20; function startAutoReload20() { reloadInterval20 = setInterval(() => { globalThis.location.reload(); console.log("Page reloading every 20 seconds."); }, 20000); } if (autoReload20Checkbox.checked) startAutoReload20(); autoReload20Checkbox.addEventListener("change", function () { saveCheckboxState("autoReload20", autoReload20Checkbox.checked); if (autoReload20Checkbox.checked) { startAutoReload20(); } else { clearInterval(reloadInterval20); console.log("Stopped reloading every 20 seconds."); } }); // Auto-reload every 30 seconds checkbox with icon const autoReload30Wrapper = document.createElement("div"); autoReload30Wrapper.style.right = "220px"; // Changed from left to right const autoReload30CheckboxId = "autoReload30Checkbox"; styleCheckboxWrapper( autoReload30Wrapper, "30s", autoReload30CheckboxId, "Check to reload every 30 seconds", ); const autoReload30Checkbox = document.createElement("input"); autoReload30Checkbox.type = "checkbox"; autoReload30Checkbox.id = autoReload30CheckboxId; autoReload30Checkbox.checked = loadCheckboxState("autoReload30"); autoReload30Checkbox.title = "Check to reload every 30 seconds"; autoReload30Wrapper.insertBefore( autoReload30Checkbox, autoReload30Wrapper.firstChild, ); let reloadInterval30; function startAutoReload30() { reloadInterval30 = setInterval(() => { globalThis.location.reload(); console.log("Page reloading every 30 seconds."); }, 30000); } if (autoReload30Checkbox.checked) startAutoReload30(); autoReload30Checkbox.addEventListener("change", function () { saveCheckboxState("autoReload30", autoReload30Checkbox.checked); if (autoReload30Checkbox.checked) { startAutoReload30(); } else { clearInterval(reloadInterval30); console.log("Stopped reloading every 30 seconds."); } }); // Append elements to the page document.body.appendChild(button); document.body.appendChild(stayAtBottomWrapper); document.body.appendChild(autoReload10Wrapper); document.body.appendChild(autoReload15Wrapper); document.body.appendChild(autoReload20Wrapper); document.body.appendChild(autoReload30Wrapper); console.log("All elements appended with styling and icons."); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址