• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】
资源图标

原创 源码 我的世界渐变文字生成器html源码 2026-03-12

完成注册/登录后下载
版权类型
原创
版权链接
#
语言支持
中文(简体)

🧩 使用方法​

  1. 输入想要变色的文字。
  2. 在“渐变颜色点”区域添加/修改颜色(至少两个)。
  3. (可选)点击多色预设快速套用配色。
  4. 选择需要的格式(粗体/斜体等)。
  5. 预览效果满意后,点击“复制代码”。
  6. 在 Minecraft 聊天框或告示牌中粘贴,发送即可看到炫彩文字!

📌 注意事项​

  • 生成的代码适用于 Minecraft Java版(基岩版部分支持,建议自行测试)。
  • 颜色代码使用 &#RRGGBB 格式(1.16+版本支持),若您使用旧版本可能需要转换为 §x§R§R§G§G§B§B 格式,请留意。
  • 随机字符效果 (&k) 在预览中用斜纹背景模拟,实际游戏中为随机闪烁字符。
html源码:
HTML:
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=yes">
    <title>多色渐变 · 文字生成器 (Minecraft)</title>
    <!-- 字体:Inter 干净现代,保留 Patrick Hand 作为手写点缀 -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&family=Patrick+Hand&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
    <style>
        /* 全新配色方案:干净、现代、适合社区发布 */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        :root {
            /* 明亮模式 */
            --bg-gradient-start: #f0f4fa;
            --bg-gradient-end: #e6ecf5;
            --card-bg: rgba(255, 255, 255, 0.85);
            --card-border: rgba(255, 255, 255, 0.4);
            --text-primary: #1a2639;
            --text-secondary: #2c3e50;
            --accent-primary: #4f46e5;      /* 靛蓝 */
            --accent-secondary: #7c3aed;     /* 紫罗兰 */
            --accent-soft: #a78bfa;
            --border-light: #d1d9e6;
            --shadow-color: rgba(0, 0, 0, 0.04);
            --button-text: white;
            --preset-bg: white;
            --preset-border: #e2e8f0;
            --option-bg: rgba(255,255,255,0.6);
            --preview-bg: #ffffffb0;
            --result-bg: #ffffffd0;
            --result-border: var(--accent-primary);
            --heading-color: #0f172a;
            --icon-color: var(--accent-primary);
        }

        body.dark-mode {
            /* 暗色模式 */
            --bg-gradient-start: #0b1120;
            --bg-gradient-end: #1a1f2f;
            --card-bg: rgba(20, 28, 40, 0.9);
            --card-border: rgba(75, 85, 99, 0.5);
            --text-primary: #e2e8f0;
            --text-secondary: #cbd5e1;
            --accent-primary: #818cf8;
            --accent-secondary: #c084fc;
            --accent-soft: #4f46e5;
            --border-light: #334155;
            --shadow-color: rgba(0, 0, 0, 0.5);
            --button-text: #0f172a;
            --preset-bg: #1e293b;
            --preset-border: #475569;
            --option-bg: rgba(30, 41, 59, 0.7);
            --preview-bg: #1e293bcc;
            --result-bg: #1e293be0;
            --result-border: var(--accent-secondary);
            --heading-color: #f1f5f9;
            --icon-color: var(--accent-secondary);
        }

        body {
            background: linear-gradient(145deg, var(--bg-gradient-start), var(--bg-gradient-end));
            color: var(--text-primary);
            font-family: 'Inter', 'PingFang SC', 'Microsoft YaHei', sans-serif;
            min-height: 100vh;
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 2rem 1rem;
            transition: background 0.3s, color 0.2s;
        }

        .generator-container {
            max-width: 1100px;
            width: 100%;
            background: var(--card-bg);
            backdrop-filter: blur(12px);
            border-radius: 36px;
            padding: 2.5rem;
            border: 1px solid var(--card-border);
            box-shadow: 0 20px 40px -12px var(--shadow-color);
            position: relative;
        }

        /* 夜间切换按钮 - 重新设计为悬浮胶囊 */
        .dark-mode-toggle {
            position: absolute;
            top: 1.5rem;
            right: 2rem;
            background: var(--preset-bg);
            border: 1.5px solid var(--border-light);
            color: var(--text-primary);
            width: 48px;
            height: 48px;
            border-radius: 30px;
            display: flex;
            align-items: center;
            justify-content: center;
            cursor: pointer;
            font-size: 1.4rem;
            transition: 0.2s;
            box-shadow: 0 4px 10px var(--shadow-color);
            z-index: 10;
        }
        .dark-mode-toggle:hover {
            border-color: var(--accent-primary);
            transform: scale(1.06);
        }

        h1 {
            font-size: 2.6rem;
            font-weight: 700;
            color: var(--heading-color);
            margin: 0 0 0.5rem 0;
            letter-spacing: -0.02em;
            display: flex;
            align-items: center;
            gap: 0.75rem;
        }
        h1 i {
            color: var(--accent-primary);
            font-size: 2.4rem;
        }

        .subtitle {
            margin-bottom: 2rem;
            color: var(--text-secondary);
            font-weight: 500;
            font-size: 1.1rem;
            background: var(--option-bg);
            padding: 0.9rem 1.5rem;
            border-radius: 60px;
            border: 1px solid var(--border-light);
            backdrop-filter: blur(4px);
            display: inline-block;
        }

        /* 输入区域 */
        .input-area {
            margin-bottom: 2rem;
        }
        .input-label {
            font-weight: 600;
            margin-bottom: 0.6rem;
            color: var(--heading-color);
            font-size: 1.1rem;
            display: flex;
            align-items: center;
            gap: 0.5rem;
        }
        .input-label i {
            color: var(--icon-color);
        }
        .text-input {
            width: 100%;
            padding: 1rem 1.6rem;
            font-size: 1.2rem;
            background: var(--preset-bg);
            border: 2px solid var(--border-light);
            border-radius: 48px;
            outline: none;
            transition: 0.2s;
            color: var(--text-primary);
            font-weight: 500;
        }
        .text-input:focus {
            border-color: var(--accent-primary);
            box-shadow: 0 0 0 3px var(--accent-soft);
        }

        /* 多色渐变控制区 */
        .multi-color-section {
            margin: 2rem 0;
            background: var(--option-bg);
            border-radius: 30px;
            padding: 1.6rem;
            border: 1px solid var(--border-light);
        }
        .section-header {
            display: flex;
            align-items: center;
            justify-content: space-between;
            flex-wrap: wrap;
            gap: 1rem;
            margin-bottom: 1.2rem;
        }
        .section-title {
            font-weight: 700;
            color: var(--heading-color);
            font-size: 1.3rem;
            display: flex;
            align-items: center;
            gap: 0.5rem;
        }
        .color-actions {
            display: flex;
            gap: 0.8rem;
        }
        .color-action-btn {
            background: var(--preset-bg);
            border: 1.5px solid var(--border-light);
            color: var(--text-primary);
            padding: 0.5rem 1.2rem;
            border-radius: 40px;
            font-weight: 600;
            font-size: 0.95rem;
            cursor: pointer;
            transition: 0.15s;
            display: flex;
            align-items: center;
            gap: 0.4rem;
        }
        .color-action-btn:hover {
            border-color: var(--accent-primary);
            background: var(--accent-primary);
            color: white;
        }
        .color-action-btn i {
            font-size: 1rem;
        }

        /* 颜色选择器列表 - 横向滚动适应 */
        .color-list {
            display: flex;
            flex-wrap: wrap;
            gap: 1rem 1.8rem;
            align-items: center;
            margin-top: 0.5rem;
        }
        .color-picker-item {
            display: flex;
            align-items: center;
            gap: 0.4rem;
            background: var(--preset-bg);
            padding: 0.4rem 0.6rem 0.4rem 0.4rem;
            border-radius: 40px;
            border: 1px solid var(--border-light);
            box-shadow: 0 2px 6px var(--shadow-color);
        }
        .color-picker-item input[type="color"] {
            width: 50px;
            height: 40px;
            border: 2px solid var(--accent-primary);
            border-radius: 30px;
            cursor: pointer;
            background: transparent;
            padding: 2px;
        }
        .color-picker-item input[type="color"]::-webkit-color-swatch-wrapper {
            padding: 0;
        }
        .color-picker-item input[type="color"]::-webkit-color-swatch {
            border: none;
            border-radius: 30px;
        }
        .remove-color-btn {
            background: transparent;
            border: none;
            color: var(--text-secondary);
            font-size: 1.2rem;
            cursor: pointer;
            width: 30px;
            height: 30px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            transition: 0.1s;
        }
        .remove-color-btn:hover {
            background: rgba(239, 68, 68, 0.2);
            color: #ef4444;
        }

        /* 预设渐变 (仍然保留, 但调整样式) */
        .preset-section {
            margin: 2rem 0;
        }
        .preset-grid {
            display: flex;
            flex-wrap: wrap;
            gap: 0.8rem;
            margin-top: 0.8rem;
        }
        .preset-item {
            flex: 0 0 auto;
            padding: 0.5rem 1.4rem;
            background: var(--preset-bg);
            border: 1.5px solid var(--preset-border);
            border-radius: 40px;
            font-weight: 600;
            color: var(--text-primary);
            cursor: pointer;
            transition: 0.15s;
            backdrop-filter: blur(4px);
            display: flex;
            align-items: center;
            gap: 0.6rem;
            font-size: 0.95rem;
        }
        .preset-item:hover {
            border-color: var(--accent-primary);
            transform: translateY(-2px);
            box-shadow: 0 6px 14px var(--shadow-color);
        }
        .preset-color {
            width: 22px;
            height: 22px;
            border-radius: 50%;
            border: 2px solid white;
            background: linear-gradient(to right, var(--start), var(--end));
        }

        /* 格式选项 - 胶囊多选 */
        .format-section {
            margin: 2rem 0;
        }
        .format-grid {
            display: flex;
            flex-wrap: wrap;
            gap: 0.7rem;
            margin-top: 0.8rem;
        }
        .format-btn {
            padding: 0.6rem 1.4rem;
            background: var(--preset-bg);
            border: 1.5px solid var(--preset-border);
            border-radius: 40px;
            font-weight: 600;
            color: var(--text-primary);
            cursor: pointer;
            transition: 0.15s;
            display: flex;
            align-items: center;
            gap: 0.4rem;
            font-size: 0.95rem;
        }
        .format-btn.active {
            background: var(--accent-primary);
            border-color: var(--accent-primary);
            color: white;
        }
        .format-btn.active i {
            color: white;
        }
        .format-btn i {
            color: var(--icon-color);
        }

        /* 预览区域 */
        .preview-area {
            background: var(--option-bg);
            border-radius: 28px;
            padding: 1.8rem;
            margin: 2rem 0;
            border: 2px dashed var(--border-light);
            text-align: center;
        }
        .preview-title {
            font-weight: 600;
            margin-bottom: 1rem;
            color: var(--text-secondary);
            font-size: 1.1rem;
            letter-spacing: 0.3px;
        }
        .preview-box {
            font-size: 2.2rem;
            word-break: break-word;
            min-height: 5rem;
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 1.2rem;
            background: var(--preview-bg);
            border-radius: 24px;
            border: 1px solid var(--border-light);
            color: var(--heading-color);
            font-weight: 600;
            line-height: 1.4;
            box-shadow: inset 0 2px 8px var(--shadow-color);
        }

        /* 结果输出 */
        .result-area {
            background: var(--result-bg);
            border-radius: 28px;
            padding: 1.6rem;
            border: 2px solid var(--result-border);
            margin: 2rem 0;
        }
        .result-header {
            display: flex;
            align-items: center;
            justify-content: space-between;
            flex-wrap: wrap;
            gap: 1rem;
            margin-bottom: 1rem;
        }
        .result-header span {
            font-weight: 700;
            color: var(--heading-color);
            font-size: 1.2rem;
            display: flex;
            align-items: center;
            gap: 0.5rem;
        }
        .copy-btn {
            background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary));
            color: var(--button-text);
            border: none;
            padding: 0.7rem 2rem;
            border-radius: 40px;
            font-size: 1rem;
            font-weight: 600;
            cursor: pointer;
            transition: 0.2s;
            box-shadow: 0 6px 14px var(--shadow-color);
            display: flex;
            align-items: center;
            gap: 0.5rem;
            border: 1px solid rgba(255,255,255,0.2);
        }
        .copy-btn:hover {
            transform: scale(1.02);
            filter: brightness(1.1);
            box-shadow: 0 10px 20px var(--shadow-color);
        }
        .result-code {
            background: var(--preset-bg);
            padding: 1.2rem;
            border-radius: 24px;
            font-family: 'Monaco', 'Menlo', monospace;
            font-size: 1rem;
            word-break: break-all;
            border: 1px solid var(--border-light);
            color: var(--text-primary);
            max-height: 150px;
            overflow-y: auto;
        }

        /* 页脚 - 通用信息 */
        .footer-note {
            margin-top: 2rem;
            text-align: center;
            color: var(--text-secondary);
            font-size: 0.95rem;
            font-weight: 500;
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 0.5rem;
        }
        .footer-note i {
            color: var(--accent-primary);
        }

        /* 移动端优化 */
        @media (max-width: 600px) {
            .generator-container { padding: 1.5rem; border-radius: 28px; }
            h1 { font-size: 2rem; }
            .subtitle { font-size: 0.95rem; padding: 0.7rem 1.2rem; }
            .dark-mode-toggle { top: 1rem; right: 1.2rem; width: 42px; height: 42px; }
            .color-list { gap: 0.8rem; }
            .color-picker-item { padding: 0.2rem 0.2rem 0.2rem 0.2rem; }
            .preset-item { padding: 0.4rem 1rem; font-size: 0.85rem; }
            .format-btn { padding: 0.4rem 1rem; font-size: 0.85rem; }
            .preview-box { font-size: 1.6rem; padding: 1rem; }
        }
    </style>
</head>
<body>
    <div class="generator-container">
        <!-- 夜间模式切换 -->
        <div class="dark-mode-toggle" id="darkModeToggle">🌙</div>

        <h1>
            <i class="fas fa-paint-roller"></i>
            多色渐变文字生成器
        </h1>
        <div class="subtitle">
            <i class="fas fa-cubes" style="margin-right: 0.5rem;"></i>
            支持任意多个颜色点,每个字符自动插值,生成Minecraft代码
        </div>

        <!-- 输入框 -->
        <div class="input-area">
            <div class="input-label"><i class="fas fa-pencil"></i> 输入文字</div>
            <input type="text" id="inputText" class="text-input" placeholder="例如:我的世界" value="我的世界">
        </div>

        <!-- 多色渐变核心区域 -->
        <div class="multi-color-section">
            <div class="section-header">
                <div class="section-title"><i class="fas fa-palette"></i> 渐变颜色点 (按顺序)</div>
                <div class="color-actions">
                    <div class="color-action-btn" id="addColorBtn"><i class="fas fa-plus"></i> 添加颜色</div>
                    <div class="color-action-btn" id="removeLastColorBtn"><i class="fas fa-minus"></i> 移除最后</div>
                </div>
            </div>
            <div id="colorList" class="color-list">
                <!-- 动态生成颜色选择器 -->
            </div>
            <p style="font-size:0.85rem; margin-top:0.8rem; color: var(--text-secondary);"><i class="fas fa-info-circle"></i> 颜色按从左到右的顺序应用于文字,超出2个时自动平滑过渡</p>
        </div>

        <!-- 快速预设 (多色预设改为三色示例,风格一致) -->
        <div class="preset-section">
            <div class="section-title"><i class="fas fa-magic"></i> 多色预设</div>
            <div class="preset-grid" id="presetContainer">
                <!-- 用js生成几个多色预设,比如彩虹、晚霞等 -->
            </div>
        </div>

        <!-- 格式选项 (保持不变,但样式已更新) -->
        <div class="format-section">
            <div class="section-title"><i class="fas fa-bold"></i> 文字格式 (可多选)</div>
            <div class="format-grid" id="formatContainer">
                <div class="format-btn" data-format="l"><i class="fas fa-bold"></i> 粗体 (&l)</div>
                <div class="format-btn" data-format="o"><i class="fas fa-italic"></i> 斜体 (&o)</div>
                <div class="format-btn" data-format="n"><i class="fas fa-underline"></i> 下划线 (&n)</div>
                <div class="format-btn" data-format="m"><i class="fas fa-strikethrough"></i> 删除线 (&m)</div>
                <div class="format-btn" data-format="k"><i class="fas fa-dice"></i> 随机 (&k)</div>
            </div>
        </div>

        <!-- 预览区域 -->
        <div class="preview-area">
            <div class="preview-title"><i class="fas fa-eye"></i> 实时预览 (效果模拟)</div>
            <div class="preview-box" id="previewBox">我的世界</div>
        </div>

        <!-- 结果输出 -->
        <div class="result-area">
            <div class="result-header">
                <span><i class="fas fa-code"></i> Minecraft格式代码 (每字后自动加&r)</span>
                <button class="copy-btn" id="copyBtn"><i class="far fa-copy"></i> 复制代码</button>
            </div>
            <div class="result-code" id="resultCode"></div>
        </div>

        <!-- 通用页脚,无特定服务器信息 -->
        <div class="footer-note">
            <i class="fas fa-cube"></i> 适用于 Minecraft 聊天/告示牌 · 自由使用
        </div>
    </div>

    <script>
        (function() {
            // --- 核心数据 ---
            // 当前选中的格式
            let activeFormats = new Set();

            // 颜色数组:默认两个颜色(橙->橙红)
            let colorValues = ['#ff4500', '#ff8c00'];

            // DOM 元素
            const inputText = document.getElementById('inputText');
            const previewBox = document.getElementById('previewBox');
            const resultCode = document.getElementById('resultCode');
            const copyBtn = document.getElementById('copyBtn');
            const colorListDiv = document.getElementById('colorList');
            const addColorBtn = document.getElementById('addColorBtn');
            const removeLastColorBtn = document.getElementById('removeLastColorBtn');
            const presetContainer = document.getElementById('presetContainer');
            const formatBtns = document.querySelectorAll('.format-btn');
            const darkModeToggle = document.getElementById('darkModeToggle');
            const body = document.body;

            // --- 多色预设 (三色/四色) ---
            const multiPresets = [
                { name: '彩虹', colors: ['#FF0000', '#FF7F00', '#FFFF00', '#00FF00', '#0000FF', '#4B0082', '#9400D3'] },
                { name: '晚霞', colors: ['#FF4500', '#FF8C00', '#FFD700', '#FFB6C1'] },
                { name: '海洋', colors: ['#00CED1', '#1E90FF', '#4169E1', '#191970'] },
                { name: '森林', colors: ['#228B22', '#32CD32', '#ADFF2F', '#6B8E23'] },
                { name: '紫罗兰', colors: ['#DA70D6', '#BA55D3', '#9932CC', '#9400D3'] },
                { name: '金橙', colors: ['#FFD700', '#FFA500', '#FF8C00'] }
            ];

            // --- 工具函数:颜色插值 (16进制) ---
            function interpolateColor(color1, color2, t) {
                const r1 = parseInt(color1.slice(1,3), 16);
                const g1 = parseInt(color1.slice(3,5), 16);
                const b1 = parseInt(color1.slice(5,7), 16);
                const r2 = parseInt(color2.slice(1,3), 16);
                const g2 = parseInt(color2.slice(3,5), 16);
                const b2 = parseInt(color2.slice(5,7), 16);
              
                const r = Math.round(r1 + (r2 - r1) * t);
                const g = Math.round(g1 + (g2 - g1) * t);
                const b = Math.round(b1 + (b2 - b1) * t);
              
                return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).padStart(6, '0')}`;
            }

            // 多色插值:根据颜色数组和比例 t (0-1) 返回颜色
            function getMultiColor(colors, t) {
                if (colors.length === 0) return '#000000';
                if (colors.length === 1) return colors[0];
                // 将t映射到区间 [0, colors.length-1]
                const pos = t * (colors.length - 1);
                const index = Math.floor(pos);
                if (index >= colors.length - 1) return colors[colors.length-1];
                const frac = pos - index;
                return interpolateColor(colors[index], colors[index+1], frac);
            }

            // 生成Minecraft代码 (每个字符独立颜色+格式)
            function generateGradientText(text) {
                if (!text) return '';
                let formatStr = '';
                const formatOrder = ['k', 'l', 'm', 'n', 'o'];
                for (const f of formatOrder) {
                    if (activeFormats.has(f)) {
                        formatStr += `&${f}`;
                    }
                }

                let result = '';
                const len = text.length;
                for (let i = 0; i < len; i++) {
                    const char = text[i];
                    if (char === ' ') {
                        result += ' ';
                        continue;
                    }
                    const t = len === 1 ? 0 : i / (len - 1);
                    const colorHex = getMultiColor(colorValues, t);
                    const colorCode = colorHex.slice(1).toLowerCase(); // 去掉#
                    result += `&#${colorCode}${formatStr}${char}&r`;
                }
                return result;
            }

            // 更新预览 (HTML模拟)
            function updatePreview() {
                const text = inputText.value;
                if (!text) {
                    previewBox.innerText = '(输入文字)';
                    resultCode.innerText = '';
                    return;
                }

                const mcCode = generateGradientText(text);
                resultCode.innerText = mcCode;

                let previewHtml = '';
                const len = text.length;
                for (let i = 0; i < len; i++) {
                    const char = text[i];
                    if (char === ' ') {
                        previewHtml += ' ';
                        continue;
                    }
                    const t = len === 1 ? 0 : i / (len - 1);
                    const colorHex = getMultiColor(colorValues, t);
                  
                    let fontWeight = activeFormats.has('l') ? 'bold' : 'normal';
                    let fontStyle = activeFormats.has('o') ? 'italic' : 'normal';
                    let textDecoration = '';
                    if (activeFormats.has('n')) textDecoration += ' underline';
                    if (activeFormats.has('m')) textDecoration += ' line-through';
                    if (activeFormats.has('k')) {
                        // 随机效果无法在HTML模拟,简单加个背景提示
                        previewHtml += `<span style="color: ${colorHex}; font-weight: ${fontWeight}; font-style: ${fontStyle}; text-decoration:${textDecoration}; background: repeating-linear-gradient(45deg, #ccc, #ccc 2px, transparent 2px, transparent 6px);">${char}</span>`;
                    } else {
                        previewHtml += `<span style="color: ${colorHex}; font-weight: ${fontWeight}; font-style: ${fontStyle}; text-decoration:${textDecoration};">${char}</span>`;
                    }
                }
                previewBox.innerHTML = previewHtml;
            }

            // --- 渲染颜色选择器列表 ---
            function renderColorPickers() {
                colorListDiv.innerHTML = '';
                colorValues.forEach((color, index) => {
                    const item = document.createElement('div');
                    item.className = 'color-picker-item';
                  
                    const colorInput = document.createElement('input');
                    colorInput.type = 'color';
                    colorInput.value = color;
                    colorInput.setAttribute('data-index', index);
                    colorInput.addEventListener('input', function(e) {
                        const idx = parseInt(e.target.dataset.index);
                        colorValues[idx] = e.target.value;
                        updatePreview();
                    });
                  
                    item.appendChild(colorInput);
                  
                    // 只有颜色数量大于2时才显示移除按钮
                    if (colorValues.length > 2) {
                        const removeBtn = document.createElement('button');
                        removeBtn.className = 'remove-color-btn';
                        removeBtn.innerHTML = '<i class="fas fa-times"></i>';
                        removeBtn.addEventListener('click', () => {
                            colorValues.splice(index, 1);
                            renderColorPickers();
                            updatePreview();
                        });
                        item.appendChild(removeBtn);
                    }
                  
                    colorListDiv.appendChild(item);
                });
            }

            // 添加新颜色 (默认添加 #4f46e5)
            function addColor() {
                if (colorValues.length >= 8) {
                    alert('最多支持8个颜色点,以免界面拥挤');
                    return;
                }
                colorValues.push('#4f46e5'); // 默认靛蓝
                renderColorPickers();
                updatePreview();
            }

            // 移除最后一个颜色
            function removeLastColor() {
                if (colorValues.length <= 2) {
                    alert('至少保留两个颜色');
                    return;
                }
                colorValues.pop();
                renderColorPickers();
                updatePreview();
            }

            // 初始化预设 (多色)
            function initPresets() {
                multiPresets.forEach(p => {
                    const btn = document.createElement('div');
                    btn.className = 'preset-item';
                    // 显示前两个颜色的小圆点
                    const gradientStyle = p.colors.length >= 2 ?
                        `linear-gradient(135deg, ${p.colors[0]}, ${p.colors[p.colors.length-1]})` :
                        p.colors[0];
                    btn.innerHTML = `<span class="preset-color" style="background: ${gradientStyle};"></span> ${p.name}`;
                    btn.addEventListener('click', () => {
                        colorValues = [...p.colors]; // 复制新数组
                        renderColorPickers();
                        updatePreview();
                    });
                    presetContainer.appendChild(btn);
                });
            }

            // 格式按钮事件
            formatBtns.forEach(btn => {
                btn.addEventListener('click', () => {
                    const format = btn.dataset.format;
                    if (activeFormats.has(format)) {
                        activeFormats.delete(format);
                        btn.classList.remove('active');
                    } else {
                        activeFormats.add(format);
                        btn.classList.add('active');
                    }
                    updatePreview();
                });
            });

            // 输入框事件
            inputText.addEventListener('input', updatePreview);

            // 复制
            copyBtn.addEventListener('click', () => {
                const code = resultCode.innerText;
                if (!code) return;
                navigator.clipboard.writeText(code).then(() => {
                    alert('复制成功!');
                }).catch(() => {
                    const textarea = document.createElement('textarea');
                    textarea.value = code;
                    document.body.appendChild(textarea);
                    textarea.select();
                    document.execCommand('copy');
                    document.body.removeChild(textarea);
                    alert('复制成功!');
                });
            });

            // 添加/移除颜色
            addColorBtn.addEventListener('click', addColor);
            removeLastColorBtn.addEventListener('click', removeLastColor);

            // --- 夜间模式 (保留,使用新图标) ---
            const currentHour = new Date().getHours();
            const isNightTime = currentHour >= 22 || currentHour < 6;
            const savedTheme = localStorage.getItem('darkMode');

            if (savedTheme === null) {
                if (isNightTime) {
                    body.classList.add('dark-mode');
                    darkModeToggle.textContent = '☀️';
                } else {
                    body.classList.remove('dark-mode');
                    darkModeToggle.textContent = '🌙';
                }
            } else if (savedTheme === 'true') {
                body.classList.add('dark-mode');
                darkModeToggle.textContent = '☀️';
            } else {
                body.classList.remove('dark-mode');
                darkModeToggle.textContent = '🌙';
            }

            darkModeToggle.addEventListener('click', function() {
                body.classList.toggle('dark-mode');
                const isDark = body.classList.contains('dark-mode');
                darkModeToggle.textContent = isDark ? '☀️' : '🌙';
                localStorage.setItem('darkMode', isDark);
            });

            // 启动!
            renderColorPickers();
            initPresets();
            updatePreview();
        })();
    </script>
</body>
</html>
作者
Yxiqwq
下载
12
查看
167
首次发布
最后更新

评分

0.00 星 0 次评分
后退
顶部 底部