您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Scrolling by dragging the mouse.
// ==UserScript== // @id scrollyId // @name scrolly <3 // @version 1.0 // @namespace azeirah // @author Martijn Brekelmans // @description Scrolling by dragging the mouse. // @locale English // @include * // @run-at document-end // ==/UserScript== "use strict"; var az = {}; az.toType = function(obj) { return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); }; az.format = function(str, args) { var re = /\{([^}]+)\}/g; return str.replace(re, function(_, match) { return args[match]; }); }; az.$ = function(queryString) { return document.querySelector(queryString); }; az.createElement = function(element, cls, attributes) { var attr; cls = cls || ""; attributes = attributes || {}; element = document.createElement(element); element.className = cls; for (attr in attributes) { if (attributes.hasOwnProperty(attr)) { element.setAttribute(attr, attributes[attr]); } } return element; }; az.magicMousey = (function() { var lastPosition; var body = document.body; var keys = {}; var lastTimes = {}; var keyCodes = { "leftMouse": 1, "middleMouse": 2, "rightMouse": 3, "backspace": 8, "tab": 9, "enter": 13, "shift": 16, "ctrl": 17, "alt": 18, "pause": 19, "break": 19, "caps": 20, "caps lock": 20, "capsLock": 20, "escape": 27, "pageup": 33, "page up": 33, "pagedown": 34, "page down": 34, "end": 35, "home": 36, "left": 37, "up": 38, "right": 39, "down": 40, "insert": 45, "delete": 46, "leftWindows": 91, "rightWindows": 92, "select": 93, "numLock": 144, "scrollLock": 145, "semiColon": 186, "equals": 187, "comma": 188, "period": 190, "forwardSlash": 191, "graveAccent": 192, "openBracket": 219, "backSlash": 220, "closeBracket": 221, "singleQuote": 222 }; function collectKeycodes(offset) { return function(value, index) { keyCodes[value] = index + offset; }; } function aggregateKeycodes(offset, prefix) { return function(value, index) { keyCodes[prefix + value] = index + offset; }; } "abcdefghijklmnopqrstuvwxyz".split("").forEach(collectKeycodes(65)); "0123456789".split("").forEach(collectKeycodes(48)); "0123456789".split("").forEach(aggregateKeycodes("num", 96)); ["multiply", "add", "subtract", "point", "divide"].forEach(collectKeycodes(106)); [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].forEach(aggregateKeycodes(112, "f")); keys.leftMouse = false; keys.middleMouse = false; keys.rightMouse = false; function generateKeydown(key, keyCode) { if (key && keyCode) { keys[key] = false; } window.addEventListener('keydown', function(event) { if (event.keyCode === keyCode) { keys[key] = true; } }); window.addEventListener('keyup', function(event) { if (event.keyCode === keyCode) { keys[key] = false; } }); } (function() { var key; var keyCode; for (key in keyCodes) { if (keyCodes.hasOwnProperty(key)) { keyCode = keyCodes[key]; generateKeydown(key, keyCode); } } }()); window.addEventListener('mousedown', function(event) { var returnVal = true; lastPosition = { x: event.clientX, y: event.clientY }; if (event.which === 1) { keys.leftMouse = true; } else if (event.which === 3) { keys.rightMouse = true; } else if (event.which === 2) { keys.middleMouse = true; returnVal = false; } return returnVal; }); window.addEventListener('mouseup', function(event) { if (event.which === 1) { keys.leftMouse = false; } else if (event.which === 3) { keys.rightMouse = false; } else if (event.which === 2) { keys.middleMouse = false; } }); function mouseDelta(func) { window.addEventListener("mousemove", function(event) { var deltaX; var deltaY; var deltaTime; var newTime; event.preventDefault(); if (keys.leftMouse || keys.rightMouse || keys.middleMouse) { if (lastTimes.mousemove !== "undefined") { newTime = +new Date(); deltaTime = newTime - lastTimes.mousemove; } var newPosition = { x: event.clientX, y: event.clientY }; if (!lastPosition) { lastPosition = newPosition; return; } deltaX = newPosition.x - lastPosition.x; deltaY = newPosition.y - lastPosition.y; func(deltaX, deltaY, deltaTime, keys); lastPosition = newPosition; lastTimes.mousemove = newTime; event.returnValue = false; } }); } return { mouseDelta: mouseDelta }; }(window)); (function () { var text; var lastTime = +new Date(); function getText(e) { text = (document.all) ? document.selection.createRange().text : document.getSelection(); text += ""; } az.magicMousey.mouseDelta(function (dx, dy, dt, keys) { getText(); if (keys.leftMouse && (!text)) { window.scrollBy(-dx, -dy); } }); }()); // anarchist-state-free scrolling az.$("html").style.margin = "1000px"; az.$("html").style.width = window.innerWidth + "px"; az.$("html").style.height = window.innerHeight + "px"; // az.$("html").style.height = "1px"; az.$("body").style.width = window.innerWidth + "px"; az.$("body").style.position = "relative"; az.$("body").style.top = "-500px"; az.$("body").style.left = "-500px"; window.scrollTo(500, 500); // text-selection with the scrollwheel // (function () { // var text = ""; // var textRange; // var lastTime = +new Date(); // function getText(e) { // textRange = (document.all) ? document.selection.createRange().text : document.getSelection(); // } // function deltaWheel(dt) { // var tRange; // var offsetDelta = Math.floor(dt / 500); // if (textRange) { // console.log(textRange.focusOffset + offsetDelta); // tRange = document.createRange(); // tRange.setStart(textRange.anchorNode, textRange.anchorOffset); // tRange.setEnd(textRange.anchorNode, textRange.focusOffset + offsetDelta); // window.getSelection().addRange(tRange); // textRange = window.getSelection(); // } // } // document.addEventListener("wheel", function (e) { // var newTime = +new Date(); // e.preventDefault(); // deltaWheel(lastTime - newTime); // lastTime = newTime; // }); // document.addEventListener("mouseup", getText); // }()); az.translate = function(value, leftMin, leftMax, rightMin, rightMax) { var leftSpan = leftMax - leftMin; var rightSpan = rightMax - rightMin; var scaled = (value - leftMin) / leftSpan; return rightMin + scaled * rightSpan; }; az.constrainValue = function(value, min, max) { if (value < min) { return min; } else if (value > max) { return max; } return value; };
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址