Web视觉效果快速切换

Toggle and configure visual effects on websites, with saved settings 灰度 反转颜色 亮度 对比度 棕褐色复古 模糊

// ==UserScript==
// @name         Web视觉效果快速切换
// @namespace    http://tampermonkey.net/
// @version      0.6
// @description  Toggle and configure visual effects on websites, with saved settings 灰度 反转颜色 亮度 对比度 棕褐色复古 模糊
// @author       You
// @match        *://*/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 保存用户设置的函数
    const saveSettings = (effect, intensity) => {
        localStorage.setItem('visualEffect', effect);
        localStorage.setItem('effectIntensity', intensity);
    };

    // 加载保存的设置
    const loadSettings = () => {
        return {
            effect: localStorage.getItem('visualEffect') || 'grayscale',
            intensity: localStorage.getItem('effectIntensity') || '100'
        };
    };

    // 应用效果的函数
    const applyEffect = (effect, intensity) => {
        switch (effect) {
            case 'grayscale':
                document.body.style.filter = `grayscale(${intensity}%)`;
                break;
            case 'invert':
                document.body.style.filter = `invert(${intensity}%)`;
                break;
            case 'brightness':
                document.body.style.filter = `brightness(${intensity}%)`;
                break;
            case 'contrast':
                document.body.style.filter = `contrast(${intensity}%)`;
                break;
            case 'sepia':
                document.body.style.filter = `sepia(${intensity}%)`;
                break;
            case 'blur':
                document.body.style.filter = `blur(${intensity / 10}px)`;  // 模糊用 px 单位
                break;
            default:
                document.body.style.filter = 'none';
        }
    };

    // 加载保存的设置并应用
    let { effect, intensity } = loadSettings();
    let isEffectActive = false;  // 默认效果是关闭的

    // 创建主界面容器
    let container = document.createElement('div');
    container.style.position = 'fixed';
    container.style.bottom = '10px';
    container.style.right = '10px';
    container.style.zIndex = '9999';
    container.style.padding = '10px';
    container.style.backgroundColor = '#333';
    container.style.color = '#fff';
    container.style.borderRadius = '5px';
    container.style.boxShadow = '0px 0px 5px rgba(0, 0, 0, 0.5)';
    container.style.width = '150px';
    container.style.cursor = 'move'; // 鼠标移上去显示为移动图标
    document.body.appendChild(container);

    // 创建开关按钮
    let toggleButton = document.createElement('button');
    toggleButton.innerHTML = '效果:关';
    toggleButton.style.display = 'block';
    toggleButton.style.marginBottom = '10px';
    toggleButton.style.padding = '10px';
    toggleButton.style.backgroundColor = '#4CAF50';
    toggleButton.style.color = '#fff';
    toggleButton.style.border = 'none';
    toggleButton.style.borderRadius = '5px';
    toggleButton.style.cursor = 'pointer';
    toggleButton.style.width = '100%';
    container.appendChild(toggleButton);

    // 创建设置按钮
    let settingsButton = document.createElement('button');
    settingsButton.innerHTML = '设置';
    settingsButton.style.display = 'block';
    settingsButton.style.padding = '10px';
    settingsButton.style.backgroundColor = '#555';
    settingsButton.style.color = '#fff';
    settingsButton.style.border = 'none';
    settingsButton.style.borderRadius = '5px';
    settingsButton.style.cursor = 'pointer';
    settingsButton.style.width = '100%';
    container.appendChild(settingsButton);

    // 创建设置界面
    let settingsContainer = document.createElement('div');
    settingsContainer.style.position = 'fixed';
    settingsContainer.style.bottom = '10px';
    settingsContainer.style.right = '170px';  // 设置界面稍微偏右显示
    settingsContainer.style.zIndex = '9999';
    settingsContainer.style.padding = '10px';
    settingsContainer.style.backgroundColor = '#333';
    settingsContainer.style.color = '#fff';
    settingsContainer.style.borderRadius = '5px';
    settingsContainer.style.boxShadow = '0px 0px 5px rgba(0, 0, 0, 0.5)';
    settingsContainer.style.width = '200px';
    settingsContainer.style.display = 'none';  // 默认隐藏
    document.body.appendChild(settingsContainer);

    // 创建下拉菜单
    let select = document.createElement('select');
    select.style.width = '100%';
    select.style.padding = '8px';
    select.style.marginBottom = '10px';
    select.style.backgroundColor = '#555';
    select.style.color = '#fff';
    select.style.border = 'none';
    select.style.borderRadius = '3px';

    let effects = [
        { value: 'grayscale', text: '灰度' },
        { value: 'invert', text: '反转颜色' },
        { value: 'brightness', text: '亮度' },
        { value: 'contrast', text: '对比度' },
        { value: 'sepia', text: '棕褐色复古' },
        { value: 'blur', text: '模糊' }
    ];

    effects.forEach(effect => {
        let option = document.createElement('option');
        option.value = effect.value;
        option.text = effect.text;
        select.appendChild(option);
    });

    select.value = effect;  // 加载保存的效果
    settingsContainer.appendChild(select);

    // 创建滑动条
    let range = document.createElement('input');
    range.type = 'range';
    range.min = '0';
    range.max = '100';
    range.value = intensity;  // 加载保存的强度
    range.style.width = '100%';
    settingsContainer.appendChild(range);

    // 创建确认按钮
    let confirmButton = document.createElement('button');
    confirmButton.innerHTML = '保存设置';
    confirmButton.style.display = 'block';
    confirmButton.style.marginTop = '10px';
    confirmButton.style.padding = '8px';
    confirmButton.style.backgroundColor = '#4CAF50';
    confirmButton.style.color = '#fff';
    confirmButton.style.border = 'none';
    confirmButton.style.borderRadius = '3px';
    confirmButton.style.cursor = 'pointer';
    confirmButton.style.width = '100%';
    settingsContainer.appendChild(confirmButton);

    // 开关效果
    toggleButton.addEventListener('click', () => {
        if (isEffectActive) {
            document.body.style.filter = 'none';
            toggleButton.innerHTML = '效果:关';
            toggleButton.style.backgroundColor = '#4CAF50';
        } else {
            applyEffect(effect, intensity);
            toggleButton.innerHTML = '效果:开';
            toggleButton.style.backgroundColor = '#f44336';
        }
        isEffectActive = !isEffectActive;  // 切换状态
    });

    // 显示/隐藏设置界面
    settingsButton.addEventListener('click', () => {
        settingsContainer.style.display = settingsContainer.style.display === 'none' ? 'block' : 'none';
    });

    // 保存设置并关闭设置界面
    confirmButton.addEventListener('click', () => {
        effect = select.value;
        intensity = range.value;
        saveSettings(effect, intensity);  // 保存设置
        settingsContainer.style.display = 'none';  // 关闭设置界面
    });

    // 拖拽功能实现
    let isDragging = false;
    let offsetX, offsetY;

    container.addEventListener('mousedown', (e) => {
        isDragging = true;
        offsetX = e.clientX - container.getBoundingClientRect().left;
        offsetY = e.clientY - container.getBoundingClientRect().top;
        container.style.cursor = 'grabbing';  // 鼠标按下时更改样式
    });

    document.addEventListener('mousemove', (e) => {
        if (isDragging) {
            container.style.left = `${e.clientX - offsetX}px`;
            container.style.top = `${e.clientY - offsetY}px`;
            container.style.bottom = 'auto';  // 清除固定底部的约束
            container.style.right = 'auto';  // 清除固定右边的约束
        }
    });

    document.addEventListener('mouseup', () => {
        if (isDragging) {
            isDragging = false;
            container.style.cursor = 'move';  // 鼠标松开时恢复样式
        }
    });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址