Files
Neo-ZQYY/apps/miniprogram/doc/progress-bar-animation.md

147 lines
5.8 KiB
Markdown
Raw 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.
# 进度条动画配置文档
> 文件路径:`apps/miniprogram/miniprogram/pages/task-list/`
---
## 概览
进度条动画由两段独立动画组成,通过 `animation-delay` 精确衔接,形成「高光扫过 → 点燃火花」的连续叙事效果。
```
┌──────────────────┐ SHINE_SPARK_GAP ┌──────────────────┐ SPARK_SHINE_GAP ┌──────────────────┐
│ 高光从左扫到右 │ ────────────────▶ │ 火花爆发消散 │ ────────────────▶ │ 高光(下一循环) │
│ SHINE_DUR(s) │ │ SPARK_DUR(s) │ │ │
└──────────────────┘ └──────────────────┘ └──────────────────┘
```
**核心机制**:两段动画共享同一 `animation-duration`totalDur火花通过负值 `animation-delay` 在循环内偏移到正确时刻。`@keyframes` 只描述各自行为,**修改时间轴参数永远不需要改 CSS 百分比**。
---
## 第一层:时间轴参数
**位置**`task-list.ts` 文件顶部常量区
```ts
const SHINE_DUR = 1.6 // 秒
const SPARK_DUR = 1.4 // 秒
const SHINE_SPARK_GAP = -200 // 毫秒
const SPARK_SHINE_GAP = 400 // 毫秒
```
| 参数 | 类型 | 说明 |
|------|------|------|
| `SHINE_DUR` | 秒(正数) | 高光从进度条**左端**扫到**右端**的时长。值越小扫得越快。 |
| `SPARK_DUR` | 秒(正数) | 火花从**爆发**到**完全消散**的时长。值越大火花飞得越慢。 |
| `SHINE_SPARK_GAP` | 毫秒(正/负) | 高光结束 → 火花开始的偏移。**正数** = 高光结束后停顿再爆发;**负数** = 高光尚未结束,火花提前爆发(产生重叠的点燃感)。 |
| `SPARK_SHINE_GAP` | 毫秒(正/负) | 火花消散后 → 下次高光从左端启动的延迟。**正数** = 停顿一段时间后重新开始;**负数** = 火花尚未消散,高光已从左端出发(自然流畅衔接)。 |
> ✅ **修改这四个常量后,不需要改任何 CSS**totalDur 和 sparkDelayCss 由 `calcAnimTimeline()` 自动计算并注入 WXML style。
### 总循环时长计算公式
```
totalDur = SHINE_DUR + SHINE_SPARK_GAP/1000 + SPARK_DUR + SPARK_SHINE_GAP/1000
```
当前默认值:`1.6 + (-0.2) + 1.4 + 0.4 = 3.2 秒`
---
## 第二层:高光外观
**位置**`task-list.wxss``.tier-shine` 选择器顶部
```css
.tier-shine {
--shine-width: 50%; /* 光束宽度 */
--shine-opacity: 1.0; /* 峰值亮度 */
--shine-color: 255, 255, 255; /* RGB 颜色 */
}
```
| 变量 | 默认值 | 说明 |
|------|--------|------|
| `--shine-width` | `50%` | 光束宽度,相对于进度条填充区域。越大光晕越宽,`30%` 偏细锐,`80%` 偏宽柔。 |
| `--shine-opacity` | `1.0` | 光束中心峰值亮度,范围 `0~1``0.5` = 半透明柔光,`1.0` = 最亮。 |
| `--shine-color` | `255, 255, 255` | 光束颜色RGB 三通道逗号分隔。`255,220,100` = 暖黄;`255,180,80` = 橙;`200,230,255` = 冷白蓝。 |
---
## 第三层:火花外观
**位置**`task-list.wxss``.tier-edge-glow` 选择器顶部
```css
.tier-edge-glow {
--spark-scale: 0.7; /* 整体缩放 */
--spark-pole-h: 30rpx; /* 光柱高度 */
}
```
| 变量 | 默认值 | 说明 |
|------|--------|------|
| `--spark-scale` | `0.7` | **整体缩放比**,同时等比缩放:光柱尺寸 + 全部粒子大小 + 飞射距离。`0.5` = 缩小一半,`1.0` = 原始大小,`2.0` = 放大一倍。 |
| `--spark-pole-h` | `30rpx` | 光柱(白色竖线)高度,宽度自动 = 高度 / 2。调大使光柱更醒目。 |
---
## 火花粒子参数
6 粒火花固定写在 `task-list.wxss`,各自方向/颜色/大小不同。如需微调单个粒子,直接修改对应的 `.spark-N``@keyframes sparkN`
| 粒子 | 颜色 | 方向 | 大小 | 爆发时刻 |
|------|------|------|------|----------|
| `spark-1` | 亮白 `#ffffff` | 右上 | 10×10rpx | 8%(较早)|
| `spark-2` | 橙色 `#fb923c` | 右下 | 12×12rpx | 12% |
| `spark-3` | 黄色 `#fde68a` | 正上 | 8×8rpx | 6%(最早)|
| `spark-4` | 红橙 `#ef4444` | 右斜上(带旋转) | 16×6rpx | 10% |
| `spark-5` | 黄白 `#fbbf24` | 正右 | 10×10rpx | 5%(最早)|
| `spark-6` | 淡橙 `#fed7aa` | 右下斜 | 14×14rpx | 15%(最晚)|
> 爆发时刻百分比 = 粒子自身 `@keyframes` 内的时刻,与总循环时长无关。
---
## 进度末端位置逻辑
火花始终显示在进度条末端,位置由 `perfData.clampedSparkPct` 控制:
```ts
clampedSparkPct = Math.max(0, Math.min(100, filledPct))
```
| 场景 | 火星位置 |
|------|----------|
| 0h未开始 | 进度条**最左端**0%|
| 任意进行中 | 对应进度处 |
| 220h满档 | 进度条**最右端**100%|
---
## 快速调参示例
### 想要「高光快、火花慢」
```ts
const SHINE_DUR = 0.8 // 高光加速
const SPARK_DUR = 2.0 // 火花放慢
const SHINE_SPARK_GAP = 0 // 高光结束立即爆发
const SPARK_SHINE_GAP = 600 // 火花消散后停顿
```
### 想要「高光和火花完全重叠」
```ts
const SHINE_DUR = 1.6
const SPARK_DUR = 1.4
const SHINE_SPARK_GAP = -800 // 高光还差 0.8s 结束时,火花就开始了
const SPARK_SHINE_GAP = -600 // 火花还差 0.6s 消散时,高光已从左端出发
```
### 想要「更大更明显的火花」
```css
/* task-list.wxss → .tier-edge-glow */
--spark-scale: 1.4; /* 放大到原来的 2 倍 */
--spark-pole-h: 50rpx; /* 光柱更高 */
```