您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Immersive dark mode for AMOLED screens
- // ==UserScript==
- // @name AMOLED Dark Mode
- // @namespace AMOLEDDark
- // @description Immersive dark mode for AMOLED screens
- // @version 1.0
- // @author moony
- // @match *://*/*
- // @grant GM_setValue
- // @grant GM_getValue
- // @run-at document-start
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- const store = {
- get: () => {
- try { return GM_getValue('amoledDarkLevel', 0); }
- catch (e) { return parseInt(localStorage.getItem('amoledDarkLevel') || 0); }
- },
- set: (v) => {
- try { GM_setValue('amoledDarkLevel', v); }
- catch (e) { localStorage.setItem('amoledDarkLevel', v); }
- }
- };
- let darkLevel = store.get(),
- MAX_LEVELS = 4,
- styleEl = null,
- indicator = null;
- // Apply at document start
- if(document.documentElement) {
- styleEl = document.createElement('style');
- styleEl.className = 'amoled-style';
- document.documentElement.appendChild(styleEl);
- applyLevel(darkLevel);
- }
- // Create indicator when body is available
- document.addEventListener('DOMContentLoaded', () => {
- updateIndicator(darkLevel);
- });
- // Debounced hotkey handler
- let keyTimer;
- document.addEventListener('keydown', e => {
- if (e.ctrlKey && e.key === '²') {
- if (keyTimer) return;
- keyTimer = setTimeout(() => { keyTimer = null; }, 300);
- darkLevel = (darkLevel + 1) % (MAX_LEVELS + 1);
- store.set(darkLevel);
- applyLevel(darkLevel);
- updateIndicator(darkLevel);
- }
- });
- function applyLevel(level) {
- if (!styleEl) return;
- if (level === 0) {
- styleEl.textContent = '';
- return;
- }
- let css = `*{background-color:#000!important;color:#fff!important;border-color:#333!important}
- ::-webkit-scrollbar{width:3px!important;height:3px!important}
- ::-webkit-scrollbar-thumb{background:#333!important;border-radius:3px!important}
- ::-webkit-scrollbar-track{background:#000!important}`;
- if (level >= 2) css += 'aside,nav,footer,.sidebar,.ads,.banner,.menu,.navigation,.footer{display:none!important}';
- if (level >= 3) css += 'img,svg,video,iframe,canvas,button:not(.essential){display:none!important}';
- if (level >= 4) {
- css += 'body>*:not(#amoled-indicator){opacity:0.3!important} main,article,.content,#content,.main-content,.post,article *{opacity:1!important}';
- }
- styleEl.textContent = css;
- }
- function updateIndicator(level) {
- if (!document.body) return;
- if (!indicator) {
- indicator = document.createElement('div');
- indicator.id = 'amoled-indicator';
- indicator.style.cssText = 'position:fixed;bottom:10px;right:10px;background:#000;color:#fff;padding:5px;border-radius:3px;z-index:9999;font-size:12px;transition:opacity 0.3s;opacity:0.6;';
- indicator.addEventListener('mouseover', () => indicator.style.opacity = '1');
- indicator.addEventListener('mouseout', () => indicator.style.opacity = '0.6');
- document.body.appendChild(indicator);
- }
- const messages = ['Off (Ctrl+² to activate)', 'Pure Black', 'Distraction-Free', 'Text-Only', 'Focus Mode'];
- indicator.textContent = `AMOLED: ${messages[level]}`;
- // Auto-hide indicator after 3 seconds
- setTimeout(() => {
- if (indicator) indicator.style.opacity = '0';
- setTimeout(() => {
- if (indicator && indicator.style.opacity === '0')
- indicator.style.display = 'none';
- }, 300);
- }, 3000);
- }
- })();