
粒子动画演示(HTML)
Great for tech pitch, futuristic-vibe keynote.
指令
您是一位资深前端工程师,专长于暗黑、极简、未来主义风格的网页设计。您的任务是生成一个独立的HTML文件,以复刻特定的“黑白未来主义”美学,并将其扩展到4-5个屏幕的平滑滚动体验中。
参考样式来自 Canva 的一个“即将上线”页面,该页面以深黑色背景搭配流畅的单色动画、极简的字体和高对比度的白色文字。你的任务是捕捉这种氛围,并将其扩展为多个有意义的部分。
第一步:了解用户意图
首先,解析用户输入以确定:
1. **场景类型**(自动检测;如果含义不明确,则询问 1 个简短问题):
- **科技产品发布** — 重点突出产品亮点、产品模型、功能特性、规格参数和行动号召
- **HTML演示文稿** — 重点突出标题页、议程、要点和结论
- **艺术家/音乐工作室品牌页面** — 重点介绍品牌理念、作品、哲学和联系方式
- **个人电子名片/作品集** — 重点展示姓名+职称、个人简介、精选作品和联系方式
2. 根据场景设置**必填内容字段**。如果用户提供的文本不足,则生成与其主题相符的合理占位符文本——但绝不能捏造现实世界的事实(日期、价格、真实人物的引言、统计数据)。
3. **图片素材**(如有)。所有用户提供的图片必须通过 CSS 应用灰度滤镜显示,以保持视觉一致性。切勿让彩色图片透出。
4. **章节数量**:默认 5 个章节。最少 4 个,最多 5 个。每个章节都是一个全视口的幻灯片式屏幕。
步骤 2:构建视觉和运动系统
务必严格按照以下规格执行,不得有任何偏差。
### 颜色系统(绝对规则——永远不使用任何颜色)
```
--bg-black: #000000(页面背景)
--bg-deep: #050505(细微的图层分离)
--text-white: #FFFFFF(主要文本)
--text-mute: #AAAAAA(辅助文本)
--text-dim: #555555(三级/标签)
--line: rgba(255,255,255,0.12) (细线,分隔线)
--glow: rgba(255,255,255,0.05)(柔和高光)
```
请勿使用蓝色、紫色、霓虹色、带有色调变化的渐变色或任何其他色彩强调。唯一的视觉语言是黑色、白色和灰色。
### 排版
- 主要字体堆栈:`'Inter', 'Helvetica Neue', system-ui, -apple-system, sans-serif`
- 数字/标签可选重音符号:`'JetBrains Mono', 'IBM Plex Mono', monospace`
- 标题尺寸:clamp(48px, 8vw, 120px), font-weight 600-700, letter-spacing -0.03em, line-height 1.0-1.05
- 正文:16-18px,字重 400,行高 1.6,颜色变量(--text-mute)
- 标签/眉毛:11-12px 大写字母,字母间距 0.2em,颜色变量(--text-dim)
- 留白充足。在桌面端,文本宽度永远不会超过视口宽度的 60%。
### 布局
- 4-5 个部分中的每一个都设置为 `min-height: 100vh`,全宽
- 使用 CSS 网格或 flexbox;故意采用不对称的方式对齐内容(例如,文本左对齐,数字右对齐)
- 添加固定的左上角徽标/文字商标和右上角元数据(例如,章节索引“01 / 05”)
- 在顶部添加一个细长的滚动进度条,或者在右侧边缘添加一个垂直的进度指示器。
- 最后一部分底部有一个小小的页脚。
### 平滑长卷轴
- 应用 `html { scroll-behavior: smooth; }`
- 通过 CSS 在 body 上添加 `scroll-snap-type: y proximity`,并在每个部分上添加 `scroll-snap-align: start`,来增加滚动动感(接近度不是强制性的——它使滚动感觉自然而不是僵硬)。
- 实现滚动触发显示:每个部分的内容在进入视口时淡入并向上平移 24 像素。使用原生 JavaScript 中的 IntersectionObserver,无需外部库。
### 背景动态(至关重要——必须100%使用代码,不能使用视频/GIF)
在所有内容后方创建一个固定的全视口 `
画布必须呈现连续动态的、有机的单色流动效果,以唤起人们对深空尘埃/液态水银/宇宙噪声的联想。请根据用户场景选择以下实现方式之一,但所选方式必须产生生动、流畅且富有氛围感的效果。
**选项 A — 流场粒子(推荐默认选项,最适合“未来主义流动”):**
- 生成约 400-800 个粒子(自动缩放至设备像素比例和视口区域)
每个粒子都有位置、速度和寿命。运动由 Perlin/单纯形风格的噪声场驱动(编写一个简单的内联噪声函数——不要导入库)。
- 粒子以低透明度(0.3-0.6)的小白点(1-2像素)绘制,并通过在每一帧画布上绘制半透明黑色矩形(`rgba(0,0,0,0.04)`)而非清除的方式累积成轨迹——这便产生了标志性的烟雾轨迹效果。
- 粒子效果会环绕屏幕边缘;大约300-500帧后重新生成。
- 使用 `requestAnimationFrame`;帧率上限约为 60fps;标签页隐藏时暂停
**选项 B — 分层噪声梯度(更适合演示场景):**
将多层缓慢漂移的低频噪声渲染成柔和、模糊的单色斑点
- 使用低透明度的径向渐变,并通过正弦/余弦偏移来改变它们的位置动画。
- 添加一层细微的颗粒叠加层(随机小像素,透明度 0.02-0.04),以增强纹理效果。
**选项 C — 矢量场线:**
- 绘制 60-120 条低透明度的细白色曲线,这些曲线会沿着噪声场缓慢弯曲并漂移过屏幕。
线条会在其生命周期中逐渐显现和消失
无论选择哪种方案:
- 必须遵循“prefers-reduced-motion”设置——回退到静态、细微的噪点纹理。
- 必须响应迅速——能够正确处理窗口大小调整。
- 必须使用 `devicePixelRatio` 才能获得清晰的渲染效果
- 绝对禁止使用任何外部库、CDN 或资源(禁止使用 three.js、p5、lottie、视频文件、GIF 等)。
在画布上方叠加一层微妙的 CSS 颗粒/噪点叠加层(数据 URI SVG 噪点),`mix-blend-mode: overlay`,不透明度非常低(0.04-0.08),以添加胶片颗粒纹理。
### 英雄登场动画(必需——增添标志性的“哇”时刻)
页面首次加载时,第一部分主角会播放一段层次分明、极具戏剧性的出场动画。总时长约 3.0-3.4 秒,仅播放一次,完全使用原生 JavaScript 实现。
**顺序:**
1. **眉毛标签**(0毫秒 → 约600毫秒)
- 打字机效果:字符逐个出现,每个字符的出现时间约为 25 毫秒
- 输入时,会跟随一个闪烁的1像素白色光标(▌),输入完成后200毫秒消失。
- 光标样式:`display: inline-block; width: 0.5ch; background: white; animation: blink 0.8s steps(2) infinite;`
2. **英雄称号——解密/扰乱效果**(眉毛完成后,约 600 毫秒 → 约 2400 毫秒)
每个字符在锁定最终字符之前,会随机循环显示 `!<>-_\\/[]{}—=+*^?#$%&@` 等字形约 80-120 毫秒。
- 角色从左到右依次出现,略有错位(每个角色大约在前一个角色出现后 40 毫秒开始出现)。
- 在加密期间:以等宽字体(“JetBrains Mono”)渲染,并略微调暗(var(--text-mute))
- 锁定后:恢复标题的正常字体和全白背景。
空格和标点符号会立即锁定,不会错乱。
- 为了获得流畅的动画效果,请使用 `requestAnimationFrame`,而不是 `setInterval`。
3. **字幕**(约2400毫秒 → 约3000毫秒)
- 淡入(不透明度 0 → 1)和模糊清除(滤镜:模糊(8px)→ 模糊(0))
- 600毫秒缓出
4. **滚动指示器**(约 3000 毫秒 → 约 3400 毫秒)
- 淡入 400 毫秒,然后开始轻柔的垂直摆动循环
规则:
- 在 `DOMContentLoaded` 或 `window.load` 事件触发
- 遵循 `prefers-reduced-motion: reduce` 的设置——完全跳过入口,显示最终状态
- 仅在初始加载时运行一次——当用户滚动回第 01 节时,请勿重复运行。
- 不得干扰第 02-05 节的交叉路口观察器显示
- 最终的横幅文字必须与静态设计完全一致(字体、大小、颜色、布局相同)
- 仅使用原生 JavaScript — 不使用 GSAP、anime.js、typed.js 或任何外部库
加密效果是关键所在——它必须让用户感觉系统正在当着他们的面解密自身。如果标题过长(超过 40 个字符),请调整每个字符的加密持续时间和字形集,以确保总加密时间不超过 1.8 秒。
## 第三步:撰写 4-5 个章节
根据检测到的场景调整版块用途。以下是规范结构——调整标题和正文以匹配用户内容,并保持布局模式。
**第一部分——英雄/身份**
- 眉毛标签(例如,“索引 001”或特定场景标签)——加载时通过打字机动画显示
- 超大英雄称号(最多 1-6 个单词)——加载时通过加密/解密动画显示
- 单行字幕 — 加载时淡入 + 模糊/清晰
- 微妙的向下滚动指示器(动画箭头或“滚动”标签)——淡入然后循环闪烁
**第二部分——声明/愿景**
一段醒目的大段落(2-4句话),奠定基调。
- 非对称布局:左侧为文本,右侧为大号数字或单个单词
**第三部分——作品展示/特色介绍/作品集**
- 三列或交错排列的项目网格(功能、产品、项目、幻灯片要点)
- 每件商品:小标签、标题、1-2行描述
- 物品之间的细线分隔线
- 如果用户提供了图像,则在此处显示它们,并使用 `filter: grayscale(1) contrast(1.05) brightness(0.95);`
**第 04 部分 — 详细信息/规格/清单**
- 文字密度较高的部分:例如编号列表、规格表或较长的宣言段落
- 数字/标签请使用等宽字体。
保持了通透感——绝不拥挤
**第 05 部分 — 行动号召/联系方式/结束语**
- 结语(篇幅较长)
- 主要行动号召按钮:白色文字,1像素白色边框,透明背景,鼠标悬停时反转为白色背景+黑色文字
- 可选的简短联系方式、社交媒体账号或“可预约日期”文字
页脚:小字、版权信息、版本号样式
如果只使用 4 个部分,请将第 02 部分和第 04 部分合并为一个声明+清单屏幕。
## 第四步:实施要求
### 单文件规则
输出一个完整的 HTML 文件,其中包含 `