Files

224 lines
11 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/svg+xml" href="logo/favicon.svg">
<title>画个标 · 动态表情设计</title>
<link rel="stylesheet" href="css/style.css?v=20260815h">
<script>window.HGB_WORKSPACE = 'emoji';</script>
<style>
/* ===== 动态表情工作区专用样式(独立模块,不混入 style.css) ===== */
.plan-preview-emoji { display: flex; align-items: center; justify-content: center; background: #fff; }
.plan-preview-emoji svg { width: 84%; height: 84%; object-fit: contain; }
/* 选中图标芯片 */
.design-icon { position: relative; width: 54px; height: 54px; border: 1px solid var(--border); border-radius: 9px;
display: flex; align-items: center; justify-content: center; background: #fff; }
.design-icon svg { width: 26px; height: 26px; color: var(--text); }
.design-icon:hover { border-color: #a5b4fc; }
.icon-del { position: absolute; top: -7px; right: -7px; width: 19px; height: 19px; border-radius: 50%;
border: none; background: #ef4444; color: #fff; font-size: 11px; line-height: 1; cursor: pointer;
display: flex; align-items: center; justify-content: center; padding: 0; }
.icon-del:hover { background: #dc2626; }
/* 预览弹窗内动画类型切换 */
#plan-anim { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 4px; }
/* 导出表单 */
.export-emoji { display: flex; flex-direction: column; gap: 10px; margin-top: 10px;
border: 1px dashed var(--border); border-radius: 10px; padding: 12px 14px; background: #fafafa; }
.ee-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ee-label { font-size: 12px; color: var(--text-dim); flex: 0 0 40px; }
.ee-fps { width: 76px; }
.ee-row .size-row, .ee-row .bg-opt-row { flex: 1; }
</style>
</head>
<body class="emoji-mode">
<!-- ===== 顶部工具栏 ===== -->
<header class="topbar">
<div class="topbar-left">
<div class="brand">
<img class="brand-icon" src="logo/logo-mark.svg" alt="画个标" width="20" height="20">
<span class="brand-name">画个标</span>
<span class="brand-tag">😀 动态表情设计</span>
</div>
<input id="project-name" class="project-name" value="我的表情" maxlength="30" title="项目名称">
</div>
<div class="topbar-right">
<a class="tb-btn" href="index.html" title="LOGO 设计工作台:图形标识 + 品牌组合,AI 生成多套 LOGO 方案">🎨 LOGO 设计</a>
<div class="tb-divider"></div>
<a class="tb-btn" href="avatar.html" title="头像设计工作台:纯图形标识,平台规格一键导出">👤 头像设计</a>
<div class="tb-divider"></div>
<a class="tb-btn" href="poster.html" title="海报设计工作台:多规格画布 · AI 生成多套海报方案">📰 海报设计</a>
<div class="tb-divider"></div>
<a class="tb-btn primary" href="emoji.html" title="动态表情设计工作台:GIF/WebM 动图导出">😀 表情设计</a>
<div class="tb-divider"></div>
<a class="tb-btn" href="skills.html" title="技能中心:集中整合所有设计技能的学习来源、详细说明与调用参数">🧩 技能中心</a>
<div class="tb-divider"></div>
<a class="tb-btn" href="sources.html" title="素材中心:分类管理图标/表情/品牌素材,来源、协议与构建信息可查">📚 素材中心</a>
</div>
</header>
<!-- ===== 智能设计工作台 ===== -->
<div class="design-workspace">
<!-- 左:配置区 -->
<aside class="design-config">
<div class="dc-group">
<div class="modal-label">🏭 选择行业</div>
<div id="design-industry" class="industry-tabs"></div>
</div>
<div class="dc-group">
<div class="modal-label">😊 选择情绪(影响动画动效,AI 与内置引擎均按情绪匹配)</div>
<div id="design-mood" class="industry-tabs"></div>
</div>
<div class="dc-group">
<div class="modal-label">🎨 选择图标(1-5 个,不选则 AI 从行业与内置库自动选用)</div>
<div id="design-icons" class="design-icons"></div>
<button class="tb-btn w-full import-more-btn" id="btn-builtin-icons" title="浏览并选择内置的 32 万+ 开源图标,供表情设计使用">
📦 内置库浏览选择(32 万+)
</button>
</div>
<div class="dc-group dc-row">
<div class="dc-col dc-gen-btn">
<button class="tb-btn primary w-full" id="btn-generate">🚀 生成表情包</button>
</div>
<div class="dc-col dc-gen-btn">
<button class="tb-btn w-full" id="btn-regenerate" title="重新生成一张底图(同参数换布局/配色/图标),整组动画同步更新">🎲 换一张底图</button>
</div>
</div>
<div class="dc-group">
<div class="modal-label">💡 智能提示</div>
<p class="pane-tip" id="design-tip">动态表情包 = 一张静态头像/图形底图 × 全部动画类型(弹跳/脉冲/摇摆/漂浮/旋转/闪烁/旋摆),微信/QQ 表情包正是这种「同图多动效」形态。🎯 点「🚀 生成表情包」出一张底图并自动展开全部动效;不满意点「🎲 换一张底图」;每张卡片自动播放动画,点「预览」可切换动效并导出 GIF(微信 240 / QQ 320,透明背景)或 WebM(Telegram 512)。</p>
</div>
</aside>
<!-- 右:方案库 -->
<div class="design-plans-wrap">
<div class="plans-head">
<span id="plans-title">😀 表情包(共 0 张)</span>
<span class="plans-tip">同一张底图 × 全部动画类型 · 卡片自动播放 · 点「预览」切换动效并导出 GIF / WebM</span>
</div>
<div id="plans-grid" class="plans-grid"></div>
<div id="plans-empty" class="plans-empty">
🎯 配置左侧参数,点击「🚀 生成表情包」——一张底图自动展开全部动画动效(弹跳/脉冲/摇摆/漂浮/旋转/闪烁/旋摆)
</div>
</div>
</div>
<!-- ===== 方案预览弹窗 ===== -->
<div id="plan-modal" class="modal-mask hidden">
<div class="modal plan-modal">
<div class="modal-head">
<span class="modal-title">😀 表情预览</span>
<span class="modal-title-sub" id="plan-modal-sub"></span>
<button class="modal-close" data-plan-close>✕</button>
</div>
<div class="modal-body plan-modal-body">
<div class="plan-areas">
<div class="plan-area">
<div class="plan-area-label">🔷 动态图形 <span class="plan-area-en">Mark + Motion</span></div>
<div class="plan-big" id="plan-mark"></div>
</div>
</div>
<div class="modal-label" style="margin-top:6px">🎬 动画类型(预览内切换)</div>
<div id="plan-anim"></div>
<div id="plan-concept" class="plan-concept-big"></div>
<div id="plan-audit" class="plan-audit"></div>
<div class="plan-variants">
<div class="modal-label">🎨 换底图变体(整组动画同步更新)</div>
<div class="variant-row">
<button class="tb-btn" id="btn-var-color" title="切换到下一套配色/风格">🎨 换配色</button>
<button class="tb-btn" id="btn-var-layout" title="切换到下一个布局模板">🅰 换布局</button>
</div>
<div class="export-emoji">
<div class="ee-row">
<span class="ee-label">尺寸</span>
<div class="size-row">
<label class="size-opt"><input type="radio" name="em-size" value="240" checked> 240<span class="size-note">微信</span></label>
<label class="size-opt"><input type="radio" name="em-size" value="320"> 320<span class="size-note">QQ</span></label>
<label class="size-opt"><input type="radio" name="em-size" value="512"> 512<span class="size-note">Telegram</span></label>
</div>
</div>
<div class="ee-row">
<span class="ee-label">帧率</span>
<input type="number" id="em-fps" class="skill-search ee-fps" value="12" min="6" max="24" step="1">
<span class="size-note">fps(GIF/WebM 共用)</span>
</div>
<div class="ee-row">
<span class="ee-label">背景</span>
<div class="bg-opt-row">
<label class="size-opt"><input type="radio" name="em-bg" value="design" checked> 方案背景</label>
<label class="size-opt"><input type="radio" name="em-bg" value="white"> 纯白</label>
<label class="size-opt"><input type="radio" name="em-bg" value="transparent"> 透明</label>
</div>
</div>
<div class="variant-row">
<button class="tb-btn" id="btn-export-png" title="导出当前静态帧为 PNG">导出 PNG</button>
<button class="tb-btn primary" id="btn-export-gif" title="导出 GIF 动图(微信/QQ 表情主流格式,透明背景)">导出 GIF ⬇</button>
<button class="tb-btn" id="btn-export-webm" title="导出 WebM 视频(Telegram 贴纸格式)">导出 WebM</button>
</div>
</div>
</div>
</div>
<div class="modal-foot">
<button class="tb-btn" data-plan-close>关闭</button>
</div>
</div>
</div>
<!-- ===== 内置图标库浏览弹窗 ===== -->
<div id="builtin-modal" class="modal-mask hidden">
<div class="modal builtin-modal">
<div class="modal-head">
<span class="modal-title">📦 内置图标库(离线 32 万+)</span>
<span class="modal-title-sub">点击选择图标(最多 5 个),用于表情方案</span>
<button class="modal-close" data-builtin-close>✕</button>
</div>
<div class="modal-body">
<div class="builtin-toolbar">
<div class="builtin-search-row">
<input type="text" id="builtin-search" class="skill-search" placeholder="🔍 搜索图标名称(英文),留空浏览已加载源…" autocomplete="off">
<span id="builtin-count" class="gh-count"></span>
</div>
</div>
<div id="builtin-grid" class="gh-grid"></div>
<div id="builtin-more-wrap" class="gh-more-wrap">
<button class="tb-btn" id="builtin-load-more">加载更多</button>
</div>
</div>
<div class="modal-foot">
<span class="gh-foot-info">已选图标会立即反映到左侧「选择图标」区</span>
<button class="tb-btn" data-builtin-close>关闭</button>
</div>
</div>
</div>
<div id="toast" class="toast hidden"></div>
<!-- 脚本(表情模块:core → 数据 → 生成 → 动画 → 编码 → 技能 → 图标库 → UI) -->
<script src="js/data/icons.js"></script>
<script src="js/data/industries.js"></script>
<script src="js/data/styles.js?v=20260813"></script>
<script src="js/data/palettes.js"></script>
<script src="js/data/fonts.js"></script>
<script src="js/data/decorations.js"></script>
<script src="js/core/store.js?v=20260816"></script>
<script src="js/core/ai.js?v=20260927a"></script>
<script src="js/core/exporter.js?v=20260812h"></script>
<script src="js/core/generator.js?v=20260815c"></script>
<script src="js/core/avatarGen.js?v=20260815c"></script>
<script src="js/core/motion.js?v=20260823h"></script>
<script src="js/core/gifEncoder.js?v=20260823e"></script>
<script src="js/core/emojiGen.js?v=20260824a"></script>
<script src="js/core/emojiAi.js?v=20260824a"></script>
<script src="js/sticker-skills/core.js?v=20260823e"></script>
<script src="js/sticker-skills/skills.js?v=20260824a"></script>
<script src="js/data/builtin-icons.js?v=20260823g"></script>
<script src="js/core/iconlib.js?v=20260823g"></script>
<script src="js/ui/emoji.js?v=20260824a"></script>
</body>
</html>