零后端打造一座「数字神话神殿」:33 位神祇、八界域、图生视频与 TTS 旁白的纯前端实践

简介: 「神话神域」是纯前端单页应用,无需后端与数据库,以HTML+CSS+JS+Tailwind构建。收录33位中国神话人物,覆盖八界域,融合写实立绘、图生视频、TTS旁白、动态界域背景、全息信息面板、侧边弹幕及带图分享等功能,打造电影级沉浸式神话展厅。(239字)

ScreenShot_2026-10-21_171441_733@2x.png

一、项目背景与目标

「神话神域」是一个全屏单页神话人物展示站,目标是在不依赖后端和数据库的前提下,做出电影级史诗展厅的沉浸感。最终收录 33 位中国神话人物,覆盖神界、仙界、魔界、妖界、灵界、冥界、佛界、龙界八类界域。

功能清单:

  • 写实 CG 全身立绘 + 5s 图生视频动态;

  • 八界域动态背景(云海、火焰、雷电、佛光、忘川等)随人物切换;

  • 低沉男声 TTS 旁白 + 循环史诗配乐,自动巡游时等旁白读完再切换;

  • 全息信息面板(简介 / 身份界域 / 神通 / 传说),悬停高亮、点击展开;

  • 模糊搜索、键盘左右切换、缩略图直达;

  • 侧边弹幕、带当前人物立绘的系统分享、全网分发;

  • 备案信息、访问统计、意见反馈、前端防复制。

技术选型刻意保持轻量:HTML + 内联 CSS + 原生 JavaScript + Tailwind CDN,无框架、无构建、无后端,一个 HTML 文件配合 assets/ 静态目录即可部署。


ScreenShot_2026-10-21_172858_874@2x.png

二、整体架构

神话神域/
├── 神话神域.html          # 单文件 SPA(结构/样式/逻辑内联)
├── robots.txt
├── sitemap.xml
└── assets/
    ├── char/<id>.jpeg     # 33 张 2730×1536 横版全身立绘
    ├── video/<id>.mp4     # 33 条 1280×720 / 5s 图生视频
    ├── voice/<id>.mp3     # 33 条 TTS 旁白(zh-CN-YunjianNeural)
    └── bgm.mp3            # 循环史诗配乐

前端分层:

层 职责
数据层 CHARACTERS 数组内联全部人物字段(名称 / 称号 / 界域 / 能力 / 传说 / 媒体路径)
状态层 普通对象 state(当前索引、是否自动巡游、当前界域),重渲染函数驱动
视图层 立绘 / 视频、全息气泡、界域背景层、弹幕层、控制栏、分享 / 反馈弹层
素材管线 离线批量生成图、视频、旁白,前端只做播放与切换

因为是纯静态,所有 "动态" 都发生在浏览器端,服务端只负责发静态文件。


ScreenShot_2026-10-21_172936_918@2x.png

三、核心实现拆解

1. 状态管理与人物渲染

不用框架,用一个普通状态对象 + 一个 renderCharacter() 重渲染函数即可。切换时更新媒体、文本、界域主题和气泡内容:

const state = { index: 0, auto: false, realm: "神界" };

function renderCharacter(animatePop = true) {
  const c = CHARACTERS[state.index];
  el.portrait.src = c.img;                 // 静图兜底
  el.vid.src = `assets/video/${base}.mp4`;  // 图生视频
  el.vid.play().catch(() => {});
  el.nameCn.textContent = c.name;
  el.nameTitle.textContent = c.title;
  // ……填充气泡、标签、界域主题、同步 og 卡片
  switchRealm(c.realm[0]);
  playNarra(c.id);
}

function goto(i) {
  state.index = (i + CHARACTERS.length) % CHARACTERS.length;
  renderCharacter();
}

自动巡游不使用固定定时器切人,而是监听旁白 ended 事件后再 goto(next),避免话没说完就切走:

narrator.addEventListener("ended", () => {
  if (state.auto) goto(state.index + 1);
});

2. 八界域主题切换

界域用 body[data-realm] 属性选择器驱动配色与装饰层,切换人物只改一个属性,CSS 负责呈现:

body[data-realm="神界"]   { --accent:#e8c26a; /* 神金 */ }
body[data-realm="冥界"]   { --accent:#8a7fb8; /* 幽紫冷青 */ }
body[data-realm="佛界"]   { --accent:#d9b86a; /* 金莲暖金 */ }
#realmLayer { /* 云海/火焰/雷电/佛光等装饰层,按界域显隐与动画 */ }

动态氛围用 Canvas 粒子 + CSS 动画实现:翻涌云海用多层渐变位移,雷电用随机折线游走,佛光用径向渐变呼吸,避免引入重型 WebGL 库。

3. 图生视频与 TTS 旁白(离线管线)

前端只播放,生成全部离线完成:

  • 立绘:统一重绘为 16:9(2730×1536)横版全身构图,避免非 16:9 显示器裁头脚;

  • 动态:以首帧立绘作为 first_frame,调用图生视频模型生成 5s、720p、h264 静音片段;

  • 旁白:edge-tts 选 zh-CN-YunjianNeural(低沉男声)逐人生成 mp3;

  • 前端 <video> 静音循环,<audio> 播放旁白,配乐独立循环并做音量侧链避让。

4. 侧边弹幕(不遮挡主体)

弹幕不放全屏横穿,而是拆成左右两条边缘通道,从根本上避免遮挡中央神像:

#danmakuLayer { position: fixed; top:6%; height:20%; z-index:12; }
.dm-channel { position:absolute; top:0; bottom:0; width:26vw; overflow:hidden; }
#dmLeft { left:0; } #dmRight { right:0; }
@keyframes dmFlyL { from{transform:translateX(105%)} to{transform:translateX(-115%)} }
@keyframes dmFlyR { from{transform:translateX(-115%)} to{transform:translateX(105%)} }

合规过滤在前端拦截链接、联系方式与灌水,生产环境建议叠加服务端审核。

5. 带图分享(Web Share Level 2)

系统分享时把当前人物立绘抓取为 File 一并交给原生分享面板,不支持 files 的环境自动降级为文案 + 链接:

async function shareWithMedia(c, text, url) {
  const abs = new URL(c.img, location.href).href;
  const blob = await (await fetch(abs)).blob();
  const file = new File([blob], `${c.name}.jpeg`, { type: blob.type || "image/jpeg" });
  const base = { title: `神话神域 · ${c.name}`, text, url };
  if (navigator.canShare?.({ files: [file] })) {
    await navigator.share({ ...base, files: [file] });
  } else if (navigator.share) {
    await navigator.share(base);
  }
}

同时在切换人物时动态更新 og:title / og:description / og:image,让聊天 / 社交卡片展示当前人物。

6. SEO 与可发现性

  • 语义化 <main>、单一 H1、Open Graph / Twitter Card / JSON-LD;

  • robots.txt + sitemap.xml;

  • 静态资源路径写在 src / CSS url(),保证发布链路扫描不裂图。

7. 免后端反馈与防复制

反馈用 mailto: 调起邮件客户端,正文自动带内容与来源页;前端防复制做了右键屏蔽、图片拖拽拦截、调试快捷键拦截(仅提高门槛,非绝对防盗)。


四、宝塔部署

纯静态无需建库,宝塔步骤:

  1. 软件商店安装 Nginx,新建站点绑定域名 shenhua.tengxiangtech.com;

  2. 把 神话神域.html 与 assets/ 整体上传到站点根目录,设置默认首页;

  3. 申请 Let's Encrypt 证书并强制 HTTPS;

  4. 开启 gzip,对 assets/ 内静态资源加长缓存;

  5. 站长平台提交 sitemap。


五、效果与可扩展方向

线上已收录 33 位神祇,打开即有云雾显形的入场仪式,支持自动巡游、搜索、弹幕与带图分享。后续可扩展:

  • 接入服务端表单 / 问卷替代 mailto,实现真实反馈收集;

  • 增加人物关系图谱与时间线视图;

  • 用 WebGL 替换 Canvas 粒子,提升八界域光影层次;

  • 支持多语言与有声读物模式。

体验地址:https://shenhua.tengxiangtech.com


前端、纯前端、单页应用、Canvas、图生视频、TTS、Web Share API、SEO、静态站、宝塔部署、国风、神话

相关文章
|
7天前
|
云安全 人工智能 运维
当攻击全面Agent化,你的安全防御能否跟上AI Speed?
多起客户侧AK泄露事件应急的真实观察
1311 6
|
5天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
|
10天前
|
存储 人工智能 安全
千问办公官网入口网页版登录:qwenwork.cn 注册送2000积分、登录送100积分
阿里云千问办公(QwenWork)是AI智能工作平台,支持一句话生成PPT、表格、网页、视频及数据分析。个人免费版送2000积分+每日登录赠100分,含1GB存储、5个发布页;企业版198元/席/月起。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
|
1月前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
9965 33
|
5天前
|
人工智能 开发者
Qoder CN 大使计划正式开启|无限创造,等你一起
全年免费积分、优先内测、活动支持与更多共创机会,邀请用 Qoder 把想法变成现实的你。
523 6
|
16天前
|
存储 人工智能 并行计算
大模型本地部署终端选型方法论:以 Qwen3.8-27B 为例的四档分层完整流程
本文提出一套大模型本地部署终端选型方法论:定约束、定档位、定框架、定参数四步决策法,配合入门、主力、质量、无损四档分层模型。以 Qwen3.8-27B 实测数据为例,逐环节解读显存、带宽、存储、散热、系统、预算等要素,给出面向不同预算的优选方案、决策自查清单与市场观察框架。文末前瞻 AI 笔记本的 CPU+GPU 与统一内存两条路线,论证四步决策法在新品类上的延续性。
|
7天前
|
Web App开发 人工智能 JavaScript
太猛了,一个月干到15W+,给大家推荐一个最近爆火的开源逆向工具:REA
REA(Reverse Engineer Anything)是近期爆火的开源AI逆向工具,4月发布,1个月内斩获15万+ Star。它让AI Agent无需源码即可分析二进制、APK、JS/Electron、HAR包等17类目标,自动反编译、生成可运行代码,并强制返回带证据与局限的结论。全本地执行,MIT协议,支持Hopper/Ghidra/IDA等引擎,一行命令即可上手。
747 2
太猛了,一个月干到15W+,给大家推荐一个最近爆火的开源逆向工具:REA
|
15天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型深度拆解:原理解读、实战测评与保姆级落地教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为**System One Model(系统一模型)**,对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
1069 1