您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
现代化设计的控件商城集成方案
当前为
// ==UserScript== // @name CoCo 控件商城增强 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 现代化设计的控件商城集成方案 // @author 邋弼暁訫 // @match https://coco.codemao.cn/editor/* // @grant GM_addStyle // @license 未经允许禁止修改并发布脚本至其他平台 // ==/UserScript== (function() { 'use strict'; // 现代感配色方案 const theme = { primary: "#6366F1", secondary: "#4C4DCA", accent: "#10B981", background: "rgba(255,255,255,0.95)", text: "#1F2937", glass: "rgba(255,255,255,0.15)" }; // 添加 Material Design 风格样式 GM_addStyle(` @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes ripple { to { transform: scale(4); opacity: 0; } } @keyframes pulse { 0% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.1); opacity: 0.7; } 100% { transform: scale(1); opacity: 1; } } /* 按钮美化 */ .enhanced-store-btn { position: relative !important; background: linear-gradient(135deg, ${theme.primary}, ${theme.secondary}) !important; color: white !important; border-radius: 999px !important; padding: 12px 24px !important; font-weight: 600 !important; box-shadow: 0 4px 20px -5px ${theme.primary}80 !important; transition: all 0.3s ease !important; overflow: hidden !important; border: none !important; cursor: pointer !important; display: flex !important; align-items: center !important; gap: 8px !important; } .enhanced-store-btn:hover { transform: translateY(-2px); box-shadow: 0 8px 25px -3px ${theme.primary}80 !important; } .enhanced-store-btn:active { transform: translateY(0); box-shadow: 0 2px 10px -2px ${theme.primary}80 !important; } .enhanced-store-btn::after { content: ""; position: absolute; top: 50%; left: 50%; width: 100%; height: 100%; background: ${theme.glass}; transform: translate(-50%, -50%) scale(0); border-radius: 50%; pointer-events: none; } .enhanced-store-btn:active::after { animation: ripple 0.6s ease-out; } .enhanced-store-btn .pulse-indicator { position: absolute; top: -6px; right: -6px; width: 16px; height: 16px; background: ${theme.accent}; border-radius: 50%; border: 2px solid white; animation: pulse 1.5s infinite; } /* 朦胧背景 */ .backdrop { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); z-index: 2147483646; opacity: 0; visibility: hidden; transition: all 0.3s ease; } .backdrop.active { opacity: 1; visibility: visible; } /* 对话框样式 */ .modern-dialog { z-index: 2147483647; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.95); width: min(90%, 1200px); height: 80vh; background: ${theme.background}; backdrop-filter: blur(15px); border-radius: 24px; box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25); border: 1px solid rgba(255,255,255,0.3); animation: fadeIn 0.4s forwards cubic-bezier(0.4, 0, 0.2, 1); overflow: hidden; transition: all 0.3s ease; } @keyframes fadeIn { to { transform: translate(-50%, -50%) scale(1); opacity: 1; } } .modern-dialog.exit { animation: fadeIn 0.3s reverse cubic-bezier(0.4, 0, 0.2, 1); opacity: 0; } .dialog-header { padding: 20px; background: linear-gradient(135deg, ${theme.primary}, ${theme.secondary}); color: white; display: flex; justify-content: space-between; align-items: center; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1); } .dialog-title { font-size: 1.5rem; font-weight: 700; display: flex; align-items: center; gap: 12px; } .dialog-title svg { width: 24px; height: 24px; } .close-btn { cursor: pointer; padding: 8px; border-radius: 50%; transition: all 0.2s ease; } .close-btn:hover { background: rgba(255,255,255,0.1); transform: rotate(90deg); } .iframe-container { height: calc(100% - 68px); position: relative; } .loading-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: ${theme.background}; display: flex; align-items: center; justify-content: center; flex-direction: column; gap: 16px; } .loading-spinner { width: 48px; height: 48px; border: 3px solid ${theme.accent}20; border-top-color: ${theme.accent}; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .resize-handle { position: absolute; bottom: 0; left: 0; width: 100%; height: 8px; cursor: ns-resize; z-index: 100; } `); // 创建现代化对话框 function createModernDialog() { // 移除旧实例 document.querySelector('.modern-dialog')?.remove(); document.querySelector('.backdrop')?.remove(); // 创建朦胧背景 const backdrop = document.createElement('div'); backdrop.className = 'backdrop active'; document.body.appendChild(backdrop); // 创建对话框结构 const dialog = document.createElement('div'); dialog.className = 'modern-dialog'; dialog.innerHTML = ` <div class="dialog-header"> <div class="dialog-title"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"> <path d="M12 2L15.09 8.26L22 9.27L17 14.14L18.18 21.02L12 17.77L5.82 21.02L7 14.14L2 9.27L8.91 8.26L12 2z"/> </svg> <span>精品控件商城</span> </div> <div class="close-btn"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"> <path d="M18 6L6 18M6 6l12 12"/> </svg> </div> </div> <div class="iframe-container"> <div class="loading-overlay"> <div class="loading-spinner"></div> <div>正在加载魔法控件库...</div> </div> </div> `; // 添加交互功能 const iframe = document.createElement('iframe'); iframe.style.cssText = ` width: 100%; height: 100%; border: none; opacity: 0; transition: opacity 0.3s ease; `; iframe.src = 'https://cocojs.lbxxsevensub.top/'; // 加载完成处理 iframe.onload = () => { iframe.style.opacity = '1'; dialog.querySelector('.loading-overlay').remove(); }; dialog.querySelector('.iframe-container').appendChild(iframe); dialog.querySelector('.close-btn').addEventListener('click', () => { dialog.classList.add('exit'); setTimeout(() => dialog.remove(), 300); backdrop.classList.remove('active'); setTimeout(() => backdrop.remove(), 300); }); // 添加拖拽调整大小功能 const resizeHandle = document.createElement('div'); resizeHandle.className = 'resize-handle'; resizeHandle.addEventListener('mousedown', (e) => { e.preventDefault(); const startY = e.clientY; const startHeight = dialog.offsetHeight; document.body.style.userSelect = 'none'; function handleMouseMove(moveEvent) { const newHeight = startHeight + (moveEvent.clientY - startY); dialog.style.height = `${Math.max(400, Math.min(window.innerHeight - 100, newHeight))}px`; } function handleMouseUp() { document.removeEventListener('mousemove', handleMouseMove); document.removeEventListener('mouseup', handleMouseUp); document.body.style.userSelect = ''; } document.addEventListener('mousemove', handleMouseMove); document.addEventListener('mouseup', handleMouseUp); }); dialog.appendChild(resizeHandle); document.body.appendChild(dialog); } // 美化商城按钮 function enhanceStoreButton() { const observer = new MutationObserver(() => { const originalBtn = document.querySelector('.WidgetList_widgetMallBtn__2_eHI'); if (originalBtn && !originalBtn.classList.contains('enhanced')) { originalBtn.classList.add('enhanced-store-btn', 'enhanced'); originalBtn.innerHTML = ` <span> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor"> <path d="M12 2L15.09 8.26L22 9.27L17 14.14L18.18 21.02L12 17.77L5.82 21.02L7 14.14L2 9.27L8.91 8.26L12 2z"/> </svg> <span>控件商店</span> </span> <div class="pulse-indicator"></div> `; originalBtn.addEventListener('click', (e) => { e.preventDefault(); e.stopPropagation(); createModernDialog(); }); } }); observer.observe(document.body, { childList: true, subtree: true }); } // 初始化 function init() { enhanceStoreButton(); // 添加键盘快捷键 (ESC关闭) document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { const dialog = document.querySelector('.modern-dialog'); const backdrop = document.querySelector('.backdrop'); if (dialog && backdrop) { dialog.classList.add('exit'); backdrop.classList.remove('active'); setTimeout(() => { dialog.remove(); backdrop.remove(); }, 300); } } }); } // 页面加载处理 if (document.readyState === 'complete') { init(); } else { window.addEventListener('load', init); } })();