您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A userscript that adds a horizontal translucent bar that follows the cursor. A reading aid for pages with wiiiiiiide paragraphs. Ctrl+Shift+R to toggle by default.
// ==UserScript== // @name Reading Ruler // @namespace https://old.reddit.com/r/SomebodyMakeThis/comments/9huwbw/smt_a_firefox_addon_that_adds_a_horizontal/ // @version 1.0.3 // @description A userscript that adds a horizontal translucent bar that follows the cursor. A reading aid for pages with wiiiiiiide paragraphs. Ctrl+Shift+R to toggle by default. // @author /u/defproc // @match */* // @grant none // ==/UserScript== (function() { 'use strict'; // quick options const conf = { colour: "#55cc551c", lineColour: "#33aa3334", // colour of the bottom edge of the bar scale: 1.05, // how many times the text's line-height should the bar's height be shadow: 0.08, // opacity of the bar's shadow (0 to 1) key: "r", // toggle key keyCtrl: true, // toggle key requires ctrl? keyAlt: true, // toggle key requires alt? keyShift: false, // toggle key requires shift? }; const bar = document.createElement("div"); let visible = false; const styles = { left: 0, right: 0, height: "1em", backgroundColor: conf.colour, borderBottom: conf.lineColour ? `1px ${conf.lineColour} solid` : void 0, position: "fixed", transform: "translateY(-50%)", display: "none", pointerEvents: "none", transition: "120ms height", boxShadow: `0 1px 4px rgba(0, 0, 0, ${conf.shadow})`, zIndex: 9999999 }; Object.keys(styles).forEach(function(k){ bar.style[k] = styles[k] }); document.body.addEventListener("mousemove", function(ev){ bar.style.top = ev.clientY + "px"; if(visible){ const over = document.elementFromPoint(ev.clientX, ev.clientY); const size = window.getComputedStyle(over).getPropertyValue("line-height"); const [m, num, unit] = (size && size.match(/([\d\.]+)([^\d]+)/)) || []; bar.style.height = m ? num * conf.scale + unit : "1em"; } }); const toggle = function(){ visible = !visible; if(!bar.parentElement){ document.body.appendChild(bar); } bar.style.display = visible ? "block" : "none"; }; window.addEventListener("keypress", function(ev){ if( !(ev.ctrlKey ^ conf.keyCtrl) && !(ev.altKey ^ conf.keyAlt) && !(ev.shiftKey ^ conf.keyShift) && ev.key.toLowerCase() == conf.key.toLowerCase() ){ toggle(); ev.preventDefault(); } }); })();