// ==UserScript== // @name 背景调节 // @namespace http://tampermonkey.net/ // @version 1.41 // @description 调整网页下方背景的透明度、颜色遮罩、模糊度,并支持上传本地图片作为背景。通过Tampermonkey菜单调整设置。 // @author Grey333 // @match *://*/* // @grant GM_setValue // @grant GM_getValue // @license MIT // @grant GM_registerMenuCommand // @downloadURL none // ==/UserScript== (function() { 'use strict'; // 默认设置 const defaultSettings = { transparency: 1, // 滑块默认最高,背景最透明 blur: 0, overlayColor: 'transparent', overlayOpacity: 0 }; // 加载保存的设置 let settings = JSON.parse(GM_getValue('settings', JSON.stringify(defaultSettings))); // 创建样式元素 const style = document.createElement('style'); style.id = 'background-adjuster-style'; document.head.appendChild(style); // 设置初始 CSS 变量,反转透明度逻辑 document.body.style.setProperty('--base-transparency', 1 - settings.transparency); document.body.style.setProperty('--base-blur', settings.blur === 0 ? 'none' : `blur(${settings.blur}px)`); document.body.style.setProperty('--overlay-color', settings.overlayColor); document.body.style.setProperty('--overlay-opacity', settings.overlayOpacity); // 添加默认白色背景层 const bgLayer = document.createElement('div'); bgLayer.id = 'background-layer'; bgLayer.style.cssText = ` position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: -2; background: #ffffff; opacity: var(--base-transparency); filter: var(--base-blur); `; document.body.insertBefore(bgLayer, document.body.firstChild); // 添加颜色遮罩层 const overlayLayer = document.createElement('div'); overlayLayer.id = 'overlay-layer'; overlayLayer.style.cssText = ` position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: -1; background: var(--overlay-color); opacity: var(--overlay-opacity); `; document.body.insertBefore(overlayLayer, document.body.firstChild.nextSibling); // 添加优化后的 CSS 样式 style.textContent = ` body { position: relative; background: transparent !important; } #background-layer { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: -2; background: #ffffff; opacity: var(--base-transparency); filter: var(--base-blur); } #overlay-layer { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: -1; background: var(--overlay-color); opacity: var(--overlay-opacity); } body > *:not(#background-layer):not(#overlay-layer):not(#bg-adjuster-panel) { position: relative; z-index: 0; } #bg-adjuster-panel { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: rgba(255, 255, 255, 0.95); border: none; padding: 20px; border-radius: 15px; box-shadow: 0 6px 20px rgba(0,0,0,0.15); z-index: 10000; display: none; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif; width: 280px; max-height: 80vh; overflow-y: auto; } #bg-adjuster-panel label { display: flex; align-items: center; margin: 15px 0; font-size: 14px; color: #333; } #bg-adjuster-panel input[type="range"] { flex: 1; margin: 0 10px; height: 10px; border-radius: 5px; background: #e0e0e0; position: relative; outline: none; cursor: pointer; appearance: none; } #bg-adjuster-panel input[type="range"]::-webkit-slider-runnable-track { height: 10px; border-radius: 5px; } #bg-adjuster-panel input[type="range"]::-moz-range-track { height: 10px; border-radius: 5px; } #bg-adjuster-panel input[type="range"]::-webkit-slider-thumb { appearance: none; width: 18px; height: 18px; background: linear-gradient(135deg, #4a90e2, #357abd); border-radius: 50%; border: 2px solid #fff; cursor: pointer; box-shadow: 0 2px 6px rgba(0,0,0,0.2); margin-top: -4px; } #bg-adjuster-panel input[type="range"]::-moz-range-thumb { width: 18px; height: 18px; background: linear-gradient(135deg, #4a90e2, #357abd); border-radius: 50%; border: 2px solid #fff; cursor: pointer; box-shadow: 0 2px 6px rgba(0,0,0,0.2); } #bg-adjuster-panel .percentage { width: 40px; text-align: right; font-size: 12px; color: #666; } #bg-adjuster-panel .color-btn { width: 24px; height: 24px; border-radius: 50%; border: 2px solid #ddd; cursor: pointer; margin-right: 8px; transition: transform 0.2s, box-shadow 0.2s; } #bg-adjuster-panel .color-btn:hover { transform: scale(1.2); box-shadow: 0 0 4px rgba(0,0,0,0.3); } #bg-adjuster-panel .color-btn:active { transform: scale(1.1); box-shadow: 0 0 6px rgba(0,0,0,0.4); } #bg-adjuster-panel #none-btn { background: transparent; border: 2px dashed #ccc; } #bg-adjuster-panel #yellow-btn { background: #ffff00; } #bg-adjuster-panel #green-btn { background: #00ff00; } #bg-adjuster-panel #custom-color { width: 40px; height: 40px; padding: 0; border: 2px solid #ddd; border-radius: 8px; cursor: pointer; margin-left: auto; } #bg-adjuster-panel button { padding: 6px 12px; cursor: pointer; border-radius: 8px; border: none; background: #f0f0f0; font-size: 12px; transition: background 0.2s; } #bg-adjuster-panel button:hover { background: #e0e0e0; } #bg-adjuster-panel #reset-btn { background: #ff3b30; color: white; } #bg-adjuster-panel #reset-btn:hover { background: #e6392e; } #bg-adjuster-panel #close-btn { background: #4a90e2; color: white; } #bg-adjuster-panel #close-btn:hover { background: #357abd; } #bg-image-label { display: block; margin: 15px 0; font-size: 14px; color: #333; white-space: nowrap; } #bg-image-label input[type="file"] { width: 100%; font-size: 12px; margin-top: 5px; } #overlay-opacity-section { display: none; /* 初始隐藏遮罩透明度 */ } `; // 创建 UI 面板 const panel = document.createElement('div'); panel.id = 'bg-adjuster-panel'; document.body.appendChild(panel); // UI 面板内容 panel.innerHTML = `