Skip to content

Feat/trajectory simplify - #10

Merged
flycran merged 7 commits into
mainfrom
feat/trajectory-simplify
Oct 29, 2026
Merged

flycran merged 7 commits into
mainfrom
feat/trajectory-simplify

Conversation

@flycran

@flycran flycran commented Oct 29, 2026

Copy link
Copy Markdown
Owner

概述

把轨迹采样式压缩换成基于容差的轨迹压缩,并新增一个完全在浏览器里运行的在线预览页面(打包后部署到 GitHub Pages)。同时重构字体加载,使字体可以从本地路径、URL 或内存中的二进制数据加载,为浏览器端复用同一套渲染逻辑铺路。

主要改动

轨迹压缩

  • sample-rate 输入移除,改为两个更可控的参数:
    • compression-tolerance(默认 0.5):播放时任一原始时刻的插值位置与真实位置的偏差上限(SVG 像素),0 为无损。
    • compression-algorithm(默认 Greedy):可选 Greedy / DP / RDP。
  • 新增 src/utils/simplifyTrajectory.ts,三种算法都通过 keyTimes 保留每个关键帧的原始时间,反弹、落地、停顿等速度变化按真实节奏播放。
  • 新增 scripts/compare.ts(bun run compare)用于对比三种算法的关键帧数量、压缩率与耗时。

浏览器端生成与在线预览

  • src/web 改为直接调用 gensvg,不再依赖 /svg 接口在服务端出图;src/app.ts 只负责托管页面,原有的 /svg 路由保留。
  • 页面改为左侧参数面板、右侧预览、底部播放条;生成后停在首帧,不自动播放;拖动进度条时暂停播放。
  • 修复播放/暂停图标同时显示的问题(hidden 属性不作用于 SVG 元素)。
  • 新增 build:web 把页面打成静态资源(dist-web/),产出使用相对路径,可直接部署到项目子路径下。
  • 新增 .github/workflows/pages.yml,在 src/**、public/**、package.json、bun.lock 变更时构建并部署到 GitHub Pages。

自定义字体

  • SimulationOptions.fontPath 改为 font,支持本地路径、http(s) URL、Buffer / ArrayBuffer(例如 files[0].arrayBuffer())。
  • 字体加载拆成 loadFontFromPath / loadFontFromUrl 两个方法,getTextPaths 改为异步。
  • node:fs / node:path / node:url 改为按需动态导入,浏览器打包不会引入 Node 模块。
  • 网页端可以上传字体文件或填写字体 URL,两者二选一,也可清除回退到内置字体。

工程与发布

  • 版本号提升到 2.0.0;dist/ 已重新打包。
  • 新增 __tests__ 下的 main、parseTextPath、simplify 用例;integration.test.ts 适配新的压缩与字体行为。
  • 文档补充在线预览入口、font-path 支持 URL 的说明,并把打包说明区分为 Action 产物与网页版静态构建。

破坏性变更

变更 影响 迁移方式
sample-rate 输入移除 仍在传入该参数的工作流会收到未知输入警告,且不再生效 改用 compression-tolerance / compression-algorithm
SimulationOptions.fontPath → font 直接调用库的代码会类型报错 重命名为 font,类型放宽为路径、URL 或二进制数据
getTextPaths 改为异步 直接调用该函数的代码需加 await —
版本 1.0.0 → 2.0.0 引用 @v1 的用户不受影响 新能力只在 @v2 提供

测试

  • bun test:71 个用例全部通过。
  • bun biome check .:无告警。
  • 浏览器实测:默认字体、上传 ttf、填写字体 URL、非法字体与 404 字体 URL 的错误提示、播放/暂停/拖动进度条、静态产物在子路径下访问,均验证通过。

部署须知

pages.yml 使用官方 Pages 部署流程,仓库需要在 Settings → Pages → Source 选择 GitHub Actions,否则 deploy job 会在 configure-pages 阶段失败。部署完成后地址为 https://flycran.github.io/github-gravity/。

- 字体数据加载拆分为 loadFontFromPath / loadFontFromUrl
- SimulationOptions.fontPath 改为 font,支持路径、URL 与 Buffer/ArrayBuffer
- node 模块改为按需动态加载
- web 端直接调用 gensvg,支持上传字体文件或填写字体 URL
- 配置面板移到左侧,预览在右侧,播放条置底
- 默认不自动播放,拖动进度条时暂停
- 修复 SVG 图标 hidden 属性失效导致播放/暂停图标同时显示
- 新增 build:web 静态打包与 Pages 部署工作流
- gensvg 内联 SVG 渲染,贡献数据模块改名并同步测试 mock
- CI 徽章改指向本仓库,不再引用模板仓库
- 新增「在线预览 / Live Preview」章节,引导到 Pages 演示站
- font-path 说明补充支持 http(s) URL
- 打包说明区分 Action 产物与网页版静态构建
- main.test.ts 改用 spyOn 替换 gensvg,避免全局 mock.module 泄漏到 integration 测试
- check-dist.yml 去掉 setup-node 的 npm 缓存(仓库只有 bun.lock),依赖改用 bun ci 安装
@flycran
flycran merged commit dc60a3d into main Oct 29, 2026
4 checks passed
@flycran
flycran deleted the feat/trajectory-simplify branch November 3, 2026 06:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant