您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Blur Box Overlay for safe browsing (i.e. hiding ad spaces or disturbing parts of the videos). Can be moved, resized and toggled
// ==UserScript== // @name Blur Box Overlay // @namespace https://greasyfork.org/en/users/1413127-tumoxep // @version 1.0 // @description Blur Box Overlay for safe browsing (i.e. hiding ad spaces or disturbing parts of the videos). Can be moved, resized and toggled // @license WTFPL // @match https://www.youtube.com/* // @grant none // ==/UserScript== (function () { "use strict"; let current = null; const BOX_DEFAULTS = { top: 120, left: 120, width: 80, height: 80, borderRadius: 8, blurAmount: 32, saturation: 120, }; const BUTTTON_DEFAULT_STYLES = { position: "absolute", width: "18px", height: "18px", borderRadius: "4px", display: "grid", placeItems: "center", fontSize: "10px", border: "1px solid rgba(0,0,0,0.12)", background: "rgba(255,255,255,0.9)", color: "#111", pointerEvents: "auto", }; function makeBlurBox() { if (current) return current; const box = document.createElement("div"); Object.assign(box.style, { position: "absolute", top: `${BOX_DEFAULTS.top}px`, left: `${BOX_DEFAULTS.left}px`, width: `${BOX_DEFAULTS.width}px`, height: `${BOX_DEFAULTS.height}px`, borderRadius: `${BOX_DEFAULTS.borderRadius}px`, zIndex: 2147483647, userSelect: "none", }); const blur = document.createElement("div"); Object.assign(blur.style, { position: "absolute", inset: 0, borderRadius: "inherit", background: "rgba(255,255,255,0.015)", backdropFilter: `blur(${BOX_DEFAULTS.blurAmount}px) saturate(${BOX_DEFAULTS.saturation}%)`, pointerEvents: "none", }); const drag = document.createElement("div"); Object.assign(drag.style, BUTTTON_DEFAULT_STYLES, { top: "6px", left: "6px", cursor: "move", }); drag.textContent = "⇅"; const resize = document.createElement("div"); Object.assign(resize.style, BUTTTON_DEFAULT_STYLES, { right: "6px", bottom: "6px", cursor: "nwse-resize", }); resize.textContent = "↘"; const toggleBtn = document.createElement("button"); Object.assign(toggleBtn.style, BUTTTON_DEFAULT_STYLES, { top: "6px", right: "6px", cursor: "pointer", }); toggleBtn.textContent = "x"; let blurEnabled = true; toggleBtn.addEventListener("click", () => { blurEnabled = !blurEnabled; blur.style.backdropFilter = blurEnabled ? `blur(${BOX_DEFAULTS.blurAmount}px) saturate(${BOX_DEFAULTS.saturation}%)` : "none"; toggleBtn.textContent = blurEnabled ? "x" : "o"; }); box.appendChild(blur); box.appendChild(drag); box.appendChild(resize); box.appendChild(toggleBtn); document.body.appendChild(box); let dragging = false; let resizing = false; let startX = 0; let startY = 0; let startLeft = 0; let startTop = 0; let startW = 0; let startH = 0; drag.addEventListener("pointerdown", (e) => { e.preventDefault(); dragging = true; drag.setPointerCapture(e.pointerId); startX = e.clientX; startY = e.clientY; const r = box.getBoundingClientRect(); startLeft = r.left + window.scrollX; startTop = r.top + window.scrollY; }); resize.addEventListener("pointerdown", (e) => { e.preventDefault(); resizing = true; resize.setPointerCapture(e.pointerId); startX = e.clientX; startY = e.clientY; const r = box.getBoundingClientRect(); startW = r.width; startH = r.height; startLeft = r.left + window.scrollX; startTop = r.top + window.scrollY; }); function onMove(e) { if (dragging) { const dx = e.clientX - startX; const dy = e.clientY - startY; box.style.left = `${startLeft + dx}px`; box.style.top = `${startTop + dy}px`; } else if (resizing) { const dx = e.clientX - startX; const dy = e.clientY - startY; box.style.width = `${Math.max(40, startW + dx)}px`; box.style.height = `${Math.max(30, startH + dy)}px`; } } function endInteraction(e) { if (dragging) { dragging = false; try { drag.releasePointerCapture(e.pointerId); } catch (e) {} } if (resizing) { resizing = false; try { resize.releasePointerCapture(e.pointerId); } catch (e) {} } } window.addEventListener("pointermove", onMove); window.addEventListener("pointerup", endInteraction); window.addEventListener("pointercancel", endInteraction); current = box; return box; } makeBlurBox(); })();