Custom Background Changer

Плавающие кнопки для смены фона: предустановки, своё изображение, сброс.

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         Custom Background Changer
// @namespace    https://bigbaazi-onlinecasino.com
// @version      2.0
// @license      MIT
// @description  Плавающие кнопки для смены фона: предустановки, своё изображение, сброс.
// @author       User
// @match        *://*/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    // ─── Конфигурация ───────────────────────────────────────────────────────────

    const STORAGE_KEY = 'customBgStyle';

    const PRESETS = [
        { name: 'Белый',              style: '#ffffff' },
        { name: 'Серый',              style: '#e0e0e0' },
        { name: 'Пастельный синий',   style: '#b8e1fc' },
        { name: 'Мятный',             style: '#b9f6ca' },
        { name: 'Градиент — закат',   style: 'linear-gradient(135deg, #ff9a9e, #fad0c4)' },
        { name: 'Градиент — ночь',    style: 'linear-gradient(135deg, #2c3e50, #000000)' },
    ];

    // ─── Применение фона ────────────────────────────────────────────────────────

    function applyBackground(style) {
        document.body.style.background           = style;
        document.body.style.backgroundSize       = 'cover';
        document.body.style.backgroundAttachment = 'fixed';
        localStorage.setItem(STORAGE_KEY, style);
    }

    function resetBackground() {
        document.body.style.background           = '';
        document.body.style.backgroundSize       = '';
        document.body.style.backgroundAttachment = '';
        localStorage.removeItem(STORAGE_KEY);
    }

    // ─── Фабрика кнопок ─────────────────────────────────────────────────────────

    function createButton({ label, color, rightOffset }) {
        const btn = document.createElement('button');
        btn.textContent = label;
        Object.assign(btn.style, {
            position:        'fixed',
            bottom:          '20px',
            right:           `${rightOffset}px`,
            zIndex:          '9999',
            padding:         '8px 16px',
            backgroundColor: color,
            color:           'white',
            border:          'none',
            borderRadius:    '20px',
            cursor:          'pointer',
            fontFamily:      'sans-serif',
            fontSize:        '14px',
            boxShadow:       '0 2px 10px rgba(0,0,0,0.3)',
            transition:      'opacity 0.2s',
        });
        btn.addEventListener('mouseover', () => { btn.style.opacity = '0.85'; });
        btn.addEventListener('mouseout',  () => { btn.style.opacity = '1'; });
        document.body.appendChild(btn);
        return btn;
    }

    // ─── Кнопка «Сменить фон» ───────────────────────────────────────────────────

    let currentIndex = 0;

    const cycleBtn = createButton({
        label:       '🎨 Сменить фон',
        color:       '#2c3e50',
        rightOffset: 20,
    });

    cycleBtn.addEventListener('click', () => {
        currentIndex = (currentIndex + 1) % PRESETS.length;
        const { name, style } = PRESETS[currentIndex];
        applyBackground(style);
        cycleBtn.textContent = `🎨 ${name}`;
    });

    // ─── Кнопка «Своё фото» ─────────────────────────────────────────────────────

    const fileInput = Object.assign(document.createElement('input'), {
        type:   'file',
        accept: 'image/*',
    });
    fileInput.style.display = 'none';
    document.body.appendChild(fileInput);

    const uploadBtn = createButton({
        label:       '📷 Своё фото',
        color:       '#27ae60',
        rightOffset: 155,
    });

    uploadBtn.addEventListener('click', () => fileInput.click());

    fileInput.addEventListener('change', () => {
        const file = fileInput.files[0];
        if (!file) return;
        const reader = new FileReader();
        reader.onload = ({ target }) => {
            const style = `url(${target.result}) no-repeat center center`;
            applyBackground(style);
            cycleBtn.textContent = '🎨 Свой фон';
        };
        reader.readAsDataURL(file);
    });

    // ─── Кнопка «Сброс» ─────────────────────────────────────────────────────────

    const resetBtn = createButton({
        label:       '✖ Сброс',
        color:       '#c0392b',
        rightOffset: 275,
    });

    resetBtn.addEventListener('click', () => {
        resetBackground();
        currentIndex = 0;
        cycleBtn.textContent = '🎨 Сменить фон';
    });

    // ─── Восстановление последнего фона ─────────────────────────────────────────

    const savedStyle = localStorage.getItem(STORAGE_KEY);
    if (savedStyle) {
        applyBackground(savedStyle);
        const matchedIndex = PRESETS.findIndex(p => p.style === savedStyle);
        if (matchedIndex !== -1) {
            currentIndex = matchedIndex;
            cycleBtn.textContent = `🎨 ${PRESETS[currentIndex].name}`;
        } else {
            cycleBtn.textContent = '🎨 Свой фон';
        }
    }

})();