您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Циклический градиент с эффектом "лазерного" перехода между цветами
// ==UserScript== // @name LAZER GRADIENT // @namespace https://github.com/GothbreachHelper/ // @version 5.1 // @description Циклический градиент с эффектом "лазерного" перехода между цветами // @author лазер дмитрий прайм // @match *://*/* // @license MIT // @grant none // @icon https://i.imgur.com/7X8kK9S.png // ==/UserScript== (function() { 'use strict'; // ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ // █▄─█▀▀▀█─▄█─▄▄─█▄─▀█▀─▄█▄─▄▄▀█▄─▄█─▄▄─█─▄─▄─█▄─▄▄─█─▄▄─█▄─▄▄▀█─▄▄─█─▄▄▄▄█─▄─▄─█▄─▄▄─█▄─▀█▄─▄█─▄▄▄▄█─█─█▄─▄█─▄▄─█▄─▀█▀─▄█ // ██─█─█─█─██─██─██─█▄█─███─▄─▄██─██─██─███─████─▄█▀█─██─██─▄─▄█─██─█▄▄▄▄─███─████─▄█▀██─█▄▀─██▄▄▄▄─█─▄─██─██─██─██─█▄█─██ // ▀▀▄▄▄▀▄▄▄▀▄▄▄▄▀▄▄▄▀▄▄▄▀▄▄▀▄▄▀▄▄▄▀▄▄▄▄▀▀▄▄▄▀▀▄▄▄▄▄▀▄▄▄▄▀▄▄▀▄▄▀▄▄▄▄▀▄▄▄▄▄▀▀▄▄▄▀▀▄▄▄▄▄▀▄▄▄▀▀▄▄▀▄▄▄▄▄▀▄▀▄▀▄▄▄▀▄▄▄▄▀▄▄▄▀▄▄▄▀ // Стили панели const panelStyle = ` position: fixed; top: 100px; left: 100px; z-index: 99999; background: rgba(10,10,10,0.96); padding: 15px; border-radius: 8px; border: 2px solid #FF00FF; box-shadow: 0 0 25px rgba(255,0,255,0.7), inset 0 0 15px rgba(0,255,255,0.4); cursor: move; user-select: none; width: 240px; font-family: 'Courier New', monospace; backdrop-filter: blur(5px); `; const gradientStyle = ` position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: -1; pointer-events: none; opacity: 0; transition: opacity 1.5s cubic-bezier(0.4, 0, 0.2, 1); `; // Создаем элементы const panel = document.createElement("div"); panel.style.cssText = panelStyle; panel.setAttribute('id', 'lazer-gradient-panel'); const gradient = document.createElement("div"); gradient.style.cssText = gradientStyle; gradient.setAttribute('id', 'lazer-gradient-effect'); // █▀▀ █▀█ █▀▀ ▄▀█ ▀█▀ █ █▀█ █▄░█ █▀▀ █▀▀ █▀█ █▄░█ █▀▀ █░█ █▀ █▀▀ █▀▄ █▀▀ █▀▀ █▄░█ █▀▀ █▀█ ▄▀█ █▀▀ █▀▀ ▀█▀ █▀█ █▀█ // █▄▄ █▀▄ ██▄ █▀█ ░█░ █ █▄█ █░▀█ ██▄ █▄▄ █▄█ █░▀█ █▄▄ █▄█ ▄█ ██▄ █▄▀ █▄█ ██▄ █░▀█ ██▄ █▀▄ █▀█ █▄▄ ██▄ ░█░ █▄█ █▀▄ // [КОНТРОЛЛЕР СКОРОСТИ] let speed = 5; const speedControlHTML = ` <div style="margin-bottom: 15px;"> <div style="display: flex; justify-content: space-between; color: #00FFFF; font-size: 12px; margin-bottom: 5px;"> <span>LAZER SPEED:</span> <span id="lazer-speed-value">${speed}</span> </div> <input type="range" min="1" max="10" value="${speed}" style="width: 100%; accent-color: #FF00FF; cursor: pointer;" id="lazer-speed-slider"> </div>`; // [ИНТЕРФЕЙС] panel.innerHTML = ` <div style="border-bottom: 1px solid #FF00FF; margin-bottom: 15px; padding-bottom: 10px; display: flex; justify-content: space-between; align-items: center;"> <div style="color: #00FFFF; font-weight: bold; text-shadow: 0 0 8px #FF00FF; font-size: 16px;"> ⚡ LAZER GRADIENT v5.0 </div> <div id="lazer-close-btn" style="color: white; cursor: pointer; font-size: 20px; transition: all 0.2s;">×</div> </div> <div id="lazer-color-container" style="display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 15px; max-height: 250px; overflow-y: auto; padding-right: 5px;"> <!-- Colors will be added here --> </div> <button id="lazer-add-color" style="background: rgba(255,0,255,0.2); color: white; border: 1px dashed #FF00FF; padding: 8px; border-radius: 5px; margin-bottom: 15px; cursor: pointer; width: 100%; font-size: 12px; transition: all 0.2s;"> + ADD LAZER COLOR (MAX 10) </button> ${speedControlHTML} <button id="lazer-toggle-btn" style="background: linear-gradient(45deg, #FF00FF, #00FFFF); color: black; border: none; padding: 10px; border-radius: 5px; cursor: pointer; font-weight: bold; width: 100%; transition: all 0.3s; font-size: 14px; text-shadow: 0 0 3px rgba(255,255,255,0.5);"> ACTIVATE LAZER </button>`; // █▀▀ █░█ █▀▀ █▀█ █▀▀ █▀▄ █▀▀ █▀█ █▄░█ █▀▀ █░█ █▀ █▀▀ █▀▄ █▀▀ █▀▀ █▄░█ █▀▀ █▀█ ▄▀█ █▀▀ █▀▀ ▀█▀ █▀█ █▀█ // █▄▄ █▀█ ██▄ █▀▄ ██▄ █▄▀ █▄▄ █▄█ █░▀█ █▄▄ █▄█ ▄█ ██▄ █▄▀ █▄█ ██▄ █░▀█ ██▄ █▀▄ █▀█ █▄▄ ██▄ ░█░ █▄█ █▀▄ // Инициализация document.body.appendChild(panel); document.body.appendChild(gradient); let isActive = false; let animationId = null; const colorInputs = []; let colorCount = 2; // Стартовые цвета const defaultColors = [ '#FF00FF', '#00FFFF', '#00FF00', '#FFFF00', '#FF0000', '#0000FF', '#FF8000', '#8000FF', '#0080FF', '#80FF00' ]; // █▀▀ █ ▀█▀ █▀▀ █▀ █▀▀ █▀█ █▄░█ █▀▀ █░█ █▀ █▀▀ █▀▄ █▀▀ █▀▀ █▄░█ █▀▀ █▀█ ▄▀█ █▀▀ █▀▀ ▀█▀ █▀█ █▀█ // █▀░ █ ░█░ ██▄ ▄█ █▄▄ █▄█ █░▀█ █▄▄ █▄█ ▄█ ██▄ █▄▀ █▄█ ██▄ █░▀█ ██▄ █▀▄ █▀█ █▄▄ ██▄ ░█░ █▄█ █▀▄ // Функция создания цветового элемента function createColorElement(index) { const wrapper = document.createElement("div"); wrapper.style.cssText = ` display: flex; flex-direction: column; gap: 5px; align-items: center; `; const label = document.createElement("div"); label.textContent = `LAZER ${index + 1}`; label.style.cssText = ` color: #00FFFF; font-size: 10px; text-align: center; width: 100%; font-weight: bold; `; const inputWrapper = document.createElement("div"); inputWrapper.style.cssText = ` display: flex; align-items: center; gap: 5px; width: 100%; justify-content: center; `; const input = document.createElement("input"); input.type = "color"; input.value = defaultColors[index]; input.style.cssText = ` width: 30px; height: 30px; cursor: pointer; flex-shrink: 0; border: 1px solid #00FFFF; border-radius: 50%; `; const deleteBtn = document.createElement("div"); deleteBtn.textContent = "×"; deleteBtn.style.cssText = ` color: white; cursor: pointer; font-size: 14px; opacity: ${index > 1 ? '0.7' : '0'}; pointer-events: ${index > 1 ? 'auto' : 'none'}; background: #FF00FF; width: 18px; height: 18px; border-radius: 50%; display: flex; align-items: center; justify-content: center; transition: all 0.2s; `; // Добавляем обработчики input.addEventListener("change", updateGradient); deleteBtn.addEventListener("click", () => removeColor(index, wrapper)); // Сохраняем ссылки colorInputs[index] = input; // Собираем компонент inputWrapper.appendChild(input); if (index > 1) inputWrapper.appendChild(deleteBtn); wrapper.appendChild(label); wrapper.appendChild(inputWrapper); return wrapper; } // Удаление цвета function removeColor(index, wrapper) { if (colorCount <= 2) return; colorContainer.removeChild(wrapper); colorInputs.splice(index, 1); colorCount--; // Перенумеровываем оставшиеся цвета const labels = colorContainer.querySelectorAll("div > div"); labels.forEach((label, i) => { label.textContent = `LAZER ${i + 1}`; }); if (isActive) updateGradient(); } // █▀▀ █░█ █▀▀ █▀█ █▀▀ █▀▄ █▀▀ █▀█ █▄░█ █▀▀ █░█ █▀ █▀▀ █▀▄ █▀▀ █▀▀ █▄░█ █▀▀ █▀█ ▄▀█ █▀▀ █▀▀ ▀█▀ █▀█ █▀█ // █▄▄ █▀█ ██▄ █▀▄ ██▄ █▄▀ █▄▄ █▄█ █░▀█ █▄▄ █▄█ ▄█ ██▄ █▄▀ █▄█ ██▄ █░▀█ ██▄ █▀▄ █▀█ █▄▄ ██▄ ░█░ █▄█ █▀▄ // Обновление градиента function updateGradient() { if (colorInputs.length < 2) return; const colors = colorInputs.map(input => input.value); const extendedColors = [...colors, colors[0]]; // Замыкаем цикл cancelAnimationFrame(animationId); let progress = 0; const animate = () => { progress = (progress + (speed * 0.0005)) % 1; // Вычисляем текущие цвета const totalSegments = extendedColors.length - 1; const globalPos = progress * totalSegments; const segmentIndex = Math.floor(globalPos); const localProgress = globalPos - segmentIndex; const startColor = extendedColors[segmentIndex]; const endColor = extendedColors[segmentIndex + 1]; const currentColor = blendColors(startColor, endColor, localProgress); gradient.style.background = currentColor; animationId = requestAnimationFrame(animate); }; animate(); } // Смешивание цветов function blendColors(color1, color2, ratio) { const r1 = parseInt(color1.substring(1, 3), 16); const g1 = parseInt(color1.substring(3, 5), 16); const b1 = parseInt(color1.substring(5, 7), 16); const r2 = parseInt(color2.substring(1, 3), 16); const g2 = parseInt(color2.substring(3, 5), 16); const b2 = parseInt(color2.substring(5, 7), 16); const r = Math.round(r1 * (1 - ratio) + r2 * ratio); const g = Math.round(g1 * (1 - ratio) + g2 * ratio); const b = Math.round(b1 * (1 - ratio) + b2 * ratio); return `rgb(${r}, ${g}, ${b})`; } // █▀▀ █░█ █▀▀ █▀█ █▀▀ █▀▄ █▀▀ █▀█ █▄░█ █▀▀ █░█ █▀ █▀▀ █▀▄ █▀▀ █▀▀ █▄░█ █▀▀ █▀█ ▄▀█ █▀▀ █▀▀ ▀█▀ █▀█ █▀█ // █▄▄ █▀█ ██▄ █▀▄ ██▄ █▄▀ █▄▄ █▄█ █░▀█ █▄▄ █▄█ ▄█ ██▄ █▄▀ █▄█ ██▄ █░▀█ ██▄ █▀▄ █▀█ █▄▄ ██▄ ░█░ █▄█ █▀▄ // Инициализация интерфейса const colorContainer = panel.querySelector("#lazer-color-container"); const addColorBtn = panel.querySelector("#lazer-add-color"); const toggleBtn = panel.querySelector("#lazer-toggle-btn"); const closeBtn = panel.querySelector("#lazer-close-btn"); const speedSlider = panel.querySelector("#lazer-speed-slider"); const speedValue = panel.querySelector("#lazer-speed-value"); // Добавляем стартовые цвета for (let i = 0; i < 2; i++) { colorContainer.appendChild(createColorElement(i)); } // █▀▀ █░█ █▀▀ █▀█ █▀▀ █▀▄ █▀▀ █▀█ █▄░█ █▀▀ █░█ █▀ █▀▀ █▀▄ █▀▀ █▀▀ █▄░█ █▀▀ █▀█ ▄▀█ █▀▀ █▀▀ ▀█▀ █▀█ █▀█ // █▄▄ █▀█ ██▄ █▀▄ ██▄ █▄▀ █▄▄ █▄█ █░▀█ █▄▄ █▄█ ▄█ ██▄ █▄▀ █▄█ ██▄ █░▀█ ██▄ █▀▄ █▀█ █▄▄ ██▄ ░█░ █▄█ █▀▄ // Обработчики событий addColorBtn.addEventListener("click", () => { if (colorCount >= 10) { alert("Maximum 10 LAZER colors!"); return; } colorContainer.appendChild(createColorElement(colorCount)); colorCount++; }); toggleBtn.addEventListener("click", () => { if (colorInputs.length < 2) { alert("Need at least 2 LAZER colors!"); return; } isActive = !isActive; if (isActive) { gradient.style.opacity = 0.85; toggleBtn.textContent = "DEACTIVATE LAZER"; toggleBtn.style.background = "linear-gradient(45deg, #FF0000, #990000)"; updateGradient(); } else { gradient.style.opacity = 0; toggleBtn.textContent = "ACTIVATE LAZER"; toggleBtn.style.background = "linear-gradient(45deg, #FF00FF, #00FFFF)"; cancelAnimationFrame(animationId); } }); speedSlider.addEventListener("input", () => { speed = parseInt(speedSlider.value); speedValue.textContent = speed; if (isActive) { cancelAnimationFrame(animationId); updateGradient(); } }); closeBtn.addEventListener("click", () => { panel.remove(); gradient.remove(); cancelAnimationFrame(animationId); }); // Перетаскивание панели let isDragging = false; let dragOffset = { x: 0, y: 0 }; panel.addEventListener("mousedown", (e) => { if (e.target.tagName !== "INPUT" && e.target !== closeBtn) { isDragging = true; dragOffset = { x: e.clientX - panel.getBoundingClientRect().left, y: e.clientY - panel.getBoundingClientRect().top }; panel.style.cursor = "grabbing"; panel.style.boxShadow = "0 0 30px rgba(255,0,255,1)"; } }); document.addEventListener("mousemove", (e) => { if (!isDragging) return; panel.style.left = `${e.clientX - dragOffset.x}px`; panel.style.top = `${e.clientY - dragOffset.y}px`; }); document.addEventListener("mouseup", () => { isDragging = false; panel.style.cursor = "move"; panel.style.boxShadow = "0 0 25px rgba(255,0,255,0.8)"; }); // Стили для скроллбара const scrollStyle = document.createElement("style"); scrollStyle.textContent = ` #lazer-color-container::-webkit-scrollbar { width: 4px; height: 4px; } #lazer-color-container::-webkit-scrollbar-thumb { background: #FF00FF; border-radius: 2px; } #lazer-color-container::-webkit-scrollbar-track { background: rgba(255,0,255,0.1); } `; document.head.appendChild(scrollStyle); console.log("⚡ LAZER GRADIENT v5.0 activated!"); })();