|
|
# 广播系统技术方案
|
|
|
|
|
|
## 1. 文档目的
|
|
|
|
|
|
基于《广播系统需求文档》,输出可直接指导开发与联调的技术落地方案,覆盖:
|
|
|
- Tauri v2 窗口与生命周期实现
|
|
|
- 5000px 标尺分段渲染策略
|
|
|
- 子元素切段一致性处理
|
|
|
- 性能、兼容性与验收测试方案
|
|
|
|
|
|
## 2. 目标与范围
|
|
|
|
|
|
### 2.1 目标
|
|
|
- 程序启动后自动创建无边框窗口,并固定在 `(0, 0)`。
|
|
|
- 在任意屏幕宽度下,正确展示宽 `5000px`、高 `64px` 的标尺内容。
|
|
|
- 当屏幕宽度小于 `5000px` 时,按“横向切片、纵向堆叠”方式渲染。
|
|
|
- 标尺满足 `10px` 小格、`100px` 大格。
|
|
|
- 主容器内子元素在切断位置保持视觉连续。
|
|
|
|
|
|
### 2.2 范围
|
|
|
- **包含**:桌面端单窗口显示、标尺渲染、分段映射、子元素切段、基础性能优化。
|
|
|
- **不包含**:网络同步、多用户协作、云端配置、复杂拖拽编辑器。
|
|
|
|
|
|
## 3. 技术选型
|
|
|
|
|
|
- 桌面容器:`Tauri v2`
|
|
|
- 前端框架:`Vue 3` + `TypeScript`
|
|
|
- 构建工具:`Vite`
|
|
|
- 样式:`CSS`(必要时搭配 CSS 变量)
|
|
|
- 渲染策略:DOM + CSS(优先),保留 Canvas 升级路径
|
|
|
|
|
|
选择理由:
|
|
|
- Tauri 体积小、启动快,适合常驻轻量显示工具。
|
|
|
- Vue 3 组件化能力可清晰拆分“窗口层 / 标尺层 / 分段层”。
|
|
|
- 5000px*64px 属于中低复杂度场景,DOM 足以支撑且便于调试与维护。
|
|
|
|
|
|
## 4. 核心实现方案
|
|
|
|
|
|
## 4.1 窗口管理实现
|
|
|
|
|
|
在 Tauri v2 配置中设置:
|
|
|
- 无边框:`decorations: false`
|
|
|
- 启动即显示:默认窗口自动创建
|
|
|
- 初始位置:`x: 0, y: 0`
|
|
|
- 可选增强:置顶 `alwaysOnTop`(按产品决策开关)
|
|
|
|
|
|
建议窗口配置(示意):
|
|
|
- 初始宽度:屏幕宽度(或合理默认值)
|
|
|
- 初始高度:由分段数量计算(见 4.2)
|
|
|
|
|
|
## 4.2 分段显示算法
|
|
|
|
|
|
定义:
|
|
|
- `TOTAL_WIDTH = 5000`
|
|
|
- `SEGMENT_HEIGHT = 64`
|
|
|
- `screenWidth = 当前主屏宽度`
|
|
|
- `segmentCount = ceil(TOTAL_WIDTH / screenWidth)`
|
|
|
|
|
|
每段 `i`(从 `0` 开始)映射:
|
|
|
- 源区域横向起点:`sourceX = i * screenWidth`
|
|
|
- 当前段有效宽度:`sliceWidth = min(screenWidth, TOTAL_WIDTH - sourceX)`
|
|
|
- 目标位置:`x = 0, y = i * SEGMENT_HEIGHT`
|
|
|
- 目标尺寸:`sliceWidth x SEGMENT_HEIGHT`
|
|
|
|
|
|
渲染方式:
|
|
|
- 外层容器高度:`segmentCount * 64px`
|
|
|
- 每一段都渲染同一条“5000px 虚拟标尺”,但通过 `transform: translateX(-sourceX)` 显示对应片段
|
|
|
- 段容器设置 `overflow: hidden`,实现“切片窗口”效果
|
|
|
|
|
|
## 4.3 标尺刻度绘制策略
|
|
|
|
|
|
总宽范围 `[0, 5000)`:
|
|
|
- 每 `10px` 一个小刻度
|
|
|
- 每 `100px` 一个大刻度(并可带数值标签)
|
|
|
|
|
|
实现建议:
|
|
|
- 通过循环生成刻度数据结构,交由 Vue 渲染
|
|
|
- 大刻度与小刻度使用不同高度和样式类
|
|
|
- 统一使用绝对定位,避免复杂流式布局导致抖动
|
|
|
|
|
|
数据模型示例:
|
|
|
- `ticks: Array<{ x: number; type: "minor" | "major"; label?: string }>`
|
|
|
|
|
|
## 4.4 子元素切断与连续性
|
|
|
|
|
|
子元素抽象:
|
|
|
- `child = { id, left, width, top, height, style }`
|
|
|
|
|
|
对第 `i` 段,子元素可见区间计算:
|
|
|
- `segmentStart = i * screenWidth`
|
|
|
- `segmentEnd = segmentStart + screenWidth`
|
|
|
- `childStart = child.left`
|
|
|
- `childEnd = child.left + child.width`
|
|
|
- 相交宽度:`visibleWidth = max(0, min(childEnd, segmentEnd) - max(childStart, segmentStart))`
|
|
|
|
|
|
若 `visibleWidth > 0`,则在该段渲染一个“切片子元素”:
|
|
|
- 本段左偏移:`renderLeft = max(childStart, segmentStart) - segmentStart`
|
|
|
- 源内容偏移:`clipOffset = max(0, segmentStart - childStart)`
|
|
|
|
|
|
连续性保证:
|
|
|
- 同一子元素跨段时复用同一视觉样式与层级
|
|
|
- 文本类子元素建议使用 `white-space: nowrap` 并通过裁剪窗口显示,避免换行错位
|
|
|
|
|
|
## 4.5 分辨率适配
|
|
|
|
|
|
- 启动时读取主屏宽度
|
|
|
- 监听窗口尺寸变化(可选)
|
|
|
- 变化后重新计算 `segmentCount` 与各段 `sourceX`
|
|
|
- 对高 DPI 环境,使用 CSS 像素布局,必要时读取缩放比做微调
|
|
|
|
|
|
## 5. 性能优化策略
|
|
|
|
|
|
- 刻度数据缓存:`ticks` 在 `TOTAL_WIDTH` 不变时仅初始化一次
|
|
|
- 分段列表缓存:仅在屏宽变化时重算
|
|
|
- 避免深层响应式:大数组使用浅响应或只读数据
|
|
|
- 降低重排:段内使用绝对定位,减少文档流参与
|
|
|
- 控制重绘:样式变化优先 `transform` / `opacity`
|
|
|
|
|
|
目标性能指标:
|
|
|
- 冷启动到首屏可见 < 1.5s(常规办公设备)
|
|
|
- resize 重算后 100ms 内完成主要布局更新
|
|
|
- 无明显掉帧和视觉撕裂
|
|
|
|
|
|
## 6. 错误处理与边界条件
|
|
|
|
|
|
- `screenWidth <= 0`:回退默认宽度(如 1920)
|
|
|
- 极窄屏幕(如 800):保证 `segmentCount` 正确增长
|
|
|
- 最后一段不足整宽:必须按 `sliceWidth` 渲染,禁止越界
|
|
|
- 子元素超出 `[0, 5000]`:按相交逻辑自动裁剪
|
|
|
|
|
|
## 7. 开发实施计划
|
|
|
|
|
|
### 阶段 1:工程初始化
|
|
|
- 初始化 Tauri v2 + Vue3 + TS 项目
|
|
|
- 完成基础窗口配置(无边框、坐标)
|
|
|
|
|
|
### 阶段 2:核心渲染
|
|
|
- 实现标尺刻度生成
|
|
|
- 实现分段容器与映射逻辑
|
|
|
- 验证不同屏宽下显示正确
|
|
|
|
|
|
### 阶段 3:子元素切段
|
|
|
- 定义子元素数据结构
|
|
|
- 完成相交裁剪与跨段显示
|
|
|
- 增加典型跨段用例
|
|
|
|
|
|
### 阶段 4:优化与验收
|
|
|
- 性能优化与边界处理
|
|
|
- 执行验收用例并修复问题
|
|
|
|
|
|
## 8. 测试与验收方案
|
|
|
|
|
|
对照需求验收项设计测试用例:
|
|
|
- 启动后窗口:无边框、位于 `(0, 0)`
|
|
|
- 主容器:逻辑宽 `5000px`、高 `64px`
|
|
|
- 分段:`segmentCount = ceil(5000 / screenWidth)`,每段高度 `64px`
|
|
|
- 刻度:`10px` 小格、`100px` 大格位置准确
|
|
|
- 子元素:跨段后位置连续、无错位/跳变
|
|
|
|
|
|
建议增加自动化:
|
|
|
- 单元测试:分段计算函数、子元素相交函数
|
|
|
- 组件测试:段渲染快照
|
|
|
- 手工测试:多分辨率与 DPI 场景
|
|
|
|
|
|
## 9. 风险与应对
|
|
|
|
|
|
- 风险:高 DPI 下 1px 线条发虚
|
|
|
应对:使用整数像素对齐与样式微调。
|
|
|
|
|
|
- 风险:窗口尺寸变化频繁触发抖动
|
|
|
应对:对 resize 处理加入节流(如 100ms)。
|
|
|
|
|
|
- 风险:后续需求扩展(动画、动态数据)导致 DOM 压力上升
|
|
|
应对:预留 Canvas 渲染替换层接口。
|
|
|
|
|
|
## 10. 交付物
|
|
|
|
|
|
- 可运行的 Tauri 广播客户端
|
|
|
- 本技术方案文档
|
|
|
- 软件架构文档
|
|
|
- 基础测试用例与验收记录
|
|
|
|