Du skal logge ind eller oprette en konto for at kunne fortsætte.
Press Alt + X to start auto-scroll or increase speed. X to pause/r###me, Space / Esc to stop. Use Up/Down to adjust speed. Page Up/Down work normally during scroll/pause. Mouse Up/Down pauses during scroll and work normally during pause.
// ==UserScript== // @name Universal Auto Scroll // @version 2.0 // @namespace MedX-AA // @author MedX // @license MIT // @description Press Alt + X to start auto-scroll or increase speed. X to pause/r###me, Space / Esc to stop. Use Up/Down to adjust speed. Page Up/Down work normally during scroll/pause. Mouse Up/Down pauses during scroll and work normally during pause. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABGUlEQVR4nO3VsS4EURQG4E9oRCEh0ZDQi3gDjV7lHXTeAYVo9gl0ahregEapoKEh0SFRbVbIyiSjEYnd2TtzZ5PzJSeZYjbzn/2LQwghlSN8oP/PFO8caqHeAOF/pni3dfpDTuvEArlFA7lFA7lFA7lFA7lFA7lFA7lFA7lFA7m1uoE9dCuErDrd8pvJvDYYvl/OS8oFOhkW6KRcYBKnDYY/x5TEpnHZQPhrzKjJLG5qDH+LOTVbxGMN4Z+xrCGreEsY/h3rGraR6Db0sCmTLXyOEP4L2zLbGWGBXS1xUCH8vhaZwPEQ4U/K37RKca3PBgh/UceVTXmtr3Jd2VTmcfdH+HssGBNLePp1ZVeMmTU8lP988RxCkN43yek7CExEuggAAAAASUVORK5CYII= // @grant none // @include * // ==/UserScript== // === CONFIGURATION === const INITIAL_SPEED = 30; // Pixels per second const SPEED_MULTIPLIER = 2.0; // Speed increase factor const SLOWDOWN_MULTIPLIER = 0.5; // Speed decrease factor // === KEY BINDINGS === const START_KEY = 88; // Alt + X starts/increases speed const PAUSE_KEY = 88; // X pauses/r###mes (only while scrolling) const STOP_KEYS = new Set([27, 32]); // Escape & Space both fully stop scrolling const SCROLL_DOWN_KEYS = new Set([40]); // Down Arrow (Speeds up) const SCROLL_UP_KEYS = new Set([38]); // Up Arrow (Slows down) const PAGE_KEYS = new Set([33, 34]); // Page Up, Page Down (Pass-through) let isScrolling = false, isPaused = false, scrollSpeed = 0, lastUpdateTime, realY; const scrollElement = document.scrollingElement || document.documentElement; let hudTimeout; // === HUD DISPLAY === const hud = Object.assign(document.createElement("div"), { style: `position:fixed; bottom:10px; right:10px; padding:5px 10px; background:rgba(0,0,0,0.7); color:#fff; font-size:14px; font-family:Arial; border-radius:5px; z-index:9999; display:none` }); document.body.appendChild(hud); // === EVENT LISTENERS === window.addEventListener('keydown', (e) => { if (e.ctrlKey || e.shiftKey) return; // Prevent conflicts with other shortcuts if (e.keyCode === START_KEY && e.altKey) { e.preventDefault(); isScrolling ? changeSpeed(SPEED_MULTIPLIER) : startScrolling(); } else if (isScrolling) { if (e.keyCode === PAUSE_KEY) { e.preventDefault(); togglePause(); } else if (STOP_KEYS.has(e.keyCode)) { e.preventDefault(); stopScrolling(); } else if (SCROLL_DOWN_KEYS.has(e.keyCode)) { e.preventDefault(); changeSpeed(SPEED_MULTIPLIER); } else if (SCROLL_UP_KEYS.has(e.keyCode)) { e.preventDefault(); changeSpeed(SLOWDOWN_MULTIPLIER); } else if (PAGE_KEYS.has(e.keyCode)) { realY = scrollElement.scrollTop; // ✅ Updates memory only (no pausing) } } else if (isPaused) { if (PAGE_KEYS.has(e.keyCode) || SCROLL_DOWN_KEYS.has(e.keyCode) || SCROLL_UP_KEYS.has(e.keyCode)) { realY = scrollElement.scrollTop; // ✅ Updates memory but does not r###me } else if (e.keyCode === PAUSE_KEY) { togglePause(); } else if (STOP_KEYS.has(e.keyCode)) { e.preventDefault(); stopScrolling(); } } }, { capture: true }); // === DETECT MOUSE WHEEL SCROLLING === window.addEventListener('wheel', (e) => { if (isScrolling) { e.preventDefault(); isPaused = true; updateHUD(); } else { realY = scrollElement.scrollTop; // ✅ Always update memory during pause } }, { passive: true }); // === DETECT MANUAL PAGE UP / PAGE DOWN SCROLLING === window.addEventListener('scroll', () => { if (isPaused || isScrolling) { realY = scrollElement.scrollTop; // ✅ Always update memory on manual scroll } }, { passive: true }); // === TOGGLE PAUSE/R###ME === const togglePause = () => { isPaused = !isPaused; updateHUD(); if (!isPaused) { lastUpdateTime = performance.now(); // Prevents jumps after r###ming requestAnimationFrame(scrollLoop); } }; // === CHANGE SCROLL SPEED === const changeSpeed = (multiplier) => { scrollSpeed = Math.max(5, scrollSpeed * multiplier); updateHUD(); }; // === START AUTO-SCROLLING === const startScrolling = () => { isScrolling = true; isPaused = false; scrollSpeed = INITIAL_SPEED; realY = scrollElement.scrollTop; lastUpdateTime = performance.now(); updateHUD(); requestAnimationFrame(scrollLoop); }; // === STOP AUTO-SCROLLING === const stopScrolling = () => { isScrolling = isPaused = false; scrollSpeed = 0; hud.style.display = "none"; }; // === MAIN SCROLL LOOP === const scrollLoop = (timestamp) => { if (!isScrolling || isPaused) return; realY += (scrollSpeed * (timestamp - lastUpdateTime)) / 1000; scrollElement.scrollTop = Math.floor(realY); lastUpdateTime = timestamp; requestAnimationFrame(scrollLoop); }; // === HUD DISPLAY FUNCTION === const updateHUD = () => { hud.textContent = isPaused ? `PAUSED (Speed: ${scrollSpeed.toFixed(1)} px/s)` : `Speed: ${scrollSpeed.toFixed(1)} px/s`; hud.style.display = "block"; clearTimeout(hudTimeout); if (!isPaused) hudTimeout = setTimeout(() => (hud.style.display = "none"), 2000); };