您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Use WASD keys to scroll, not just arrow buttons
// ==UserScript== // @name WASD Scroll hotkeys for websites // @namespace wasd_scroll // @author Owyn // @version 1.1 // @description Use WASD keys to scroll, not just arrow buttons // @supportURL https://github.com/Owyn/WASD_Scroll/issues // @homepage https://github.com/Owyn/WASD_Scroll // @run-at document-end // @grant GM_registerMenuCommand // @sandbox JavaScript // @match http://*/* // @match https://*/* // @match file:///*/* // ==/UserScript== "use strict"; var scroll_window_percentage = 0.20; // from 0.0 to 1.0 (meaning 0% to 100%) how much WASD scrolls of the screen var space_scroll_by = 0.80; // how much space it scrolls of the screen - only for when "aggressive mode" is On var scroll_speed = "smooth"; // "smooth" / "instant" / "auto" window.addEventListener("keydown", onkeydown, true); // before all others - change to false to make it work after all other listeners if (typeof GM_registerMenuCommand !== "undefined") { GM_registerMenuCommand("WASD Scroll - Disable (this once)", disable, "w"); GM_registerMenuCommand("WASD Scroll - toggle aggressive mode for this website", wasd_toggle, "a"); } if (typeof KeyEvent === "undefined") { var KeyEvent = { DOM_VK_A: 65, DOM_VK_D: 68, DOM_VK_S: 83, DOM_VK_W: 87, DOM_VK_SPACE: 32, }; } var inputs = ['input', 'select', 'button', 'textarea']; function onkeydown (b) { let a = (window.event) ? b.keyCode : b.which; let by = window.innerHeight * scroll_window_percentage if (b.altKey || b.ctrlKey || b.metaKey) { return; } let activeElement = document.activeElement; //console.warn(activeElement); //console.warn(b.target); if (activeElement && (inputs.indexOf(activeElement.tagName.toLowerCase()) !== -1 || activeElement.contentEditable === "true")) { return; } let whatWeScroll = window; //document.body; // or window ? let aggro = localStorage.getItem('WASD_AGGR') ? true : false; let everything = aggro ? document.querySelectorAll("*") : []; // lets scroll everything, we can't miss that way! for (let i = 0; i <= everything.length; i++) { switch (a) { case KeyEvent.DOM_VK_D: whatWeScroll.scrollBy({ top: 0, left: by, behavior: scroll_speed }); if(aggro) b.stopImmediatePropagation(); break; case KeyEvent.DOM_VK_A: whatWeScroll.scrollBy({ top: 0, left: by * -1, behavior: scroll_speed }); if(aggro) b.stopImmediatePropagation(); break; case KeyEvent.DOM_VK_W: whatWeScroll.scrollBy({ top: by * -1, left: 0, behavior: scroll_speed }); if(aggro) b.stopImmediatePropagation(); break; case KeyEvent.DOM_VK_S: whatWeScroll.scrollBy({ top: by, left: 0, behavior: scroll_speed }); if(aggro) b.stopImmediatePropagation(); break; case KeyEvent.DOM_VK_SPACE: if(!aggro) return; whatWeScroll.scrollBy({ top: window.innerHeight * space_scroll_by * (b.shiftKey ? -1 : 1), left: 0, behavior: scroll_speed }); b.preventDefault(); b.stopImmediatePropagation(); break; default: return; } whatWeScroll = everything[i]; } } function disable() { window.removeEventListener("keydown", onkeydown, false); console.warn("WASD Scroll disabled"); } function wasd_toggle() { console.warn("WASD aggressive mode toggled"); if(localStorage.getItem('WASD_AGGR')) { localStorage.removeItem('WASD_AGGR'); alert("OFF - now WASD scrolling is back to normal"); } else { localStorage.setItem('WASD_AGGR', "1"); alert("ON - now WASD scrolling will try to scroll EVERY element on the page and block origianl WASD-site hotkeys (if present), and own spacebar scroll will be added as well, this is remembered per-site (via cookies LocalStorage)"); } }