# timeline-canvas
**Repository Path**: Zh-Sky/timeline-canvas
## Basic Information
- **Project Name**: timeline-canvas
- **Description**: 高性能 Canvas 时间轴组件,一个轻量级、插件化、高性能的时间数据可视化方案
- **Primary Language**: TypeScript
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-12-17
- **Last Updated**: 2026-02-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Timeline Canvas
一个基于 HTML5 Canvas 和 TypeScript 构建的强大、高性能时间轴组件。
[文档地址](https://umbrella22.github.io/timeline-canvas/index.html)
## 特性
- 🚀 **高性能**: 基于 Canvas API 构建,可流畅渲染大量数据。
- 🎨 **主题支持**: 内置亮色和暗色主题,支持自定义主题。
- 🖱️ **交互丰富**:
- 拖拽移动事件。
- 从两端调整事件大小。
- 双击切割事件。
- 缩放 (Ctrl/Cmd + 滚动) 和平移。
- 支持右键菜单。
- 📏 **智能辅助线**: 对齐辅助线和吸附功能,实现精确的事件放置。
- ⏱️ **时间指示器**: 可拖动的时间头,支持吸附。
- 🔌 **插件系统**: 可扩展架构,内置主题、右键菜单等插件。
- 📝 **TypeScript**: 使用 TypeScript 编写,提供完整的类型定义。
## 安装
```bash
npm install timeline-canvas
# or
pnpm add timeline-canvas
# or
yarn add timeline-canvas
```
## 基础用法
1. 在 HTML 中创建一个包含 canvas 元素的容器:
```html
```
1. 初始化 Timeline:
```typescript
import { Timeline } from "timeline-canvas";
// 初始化
const timeline = new Timeline("timeline-canvas", {
startTime: 0,
endTime: 100,
trackHeight: 40,
// ... 其他选项
});
// 添加一个轨道
timeline.addTrack();
// 添加一个事件 (轨道索引, 开始时间, 结束时间, 标题)
timeline.addEvent(0, 10, 30, "我的事件", "描述信息");
```
## 配置
`Timeline` 构造函数接受一个配置对象:
```typescript
interface TimelineOptions {
// 尺寸设置
canvasHeight?: number;
trackHeight?: number;
trackMargin?: number;
timelineHeight?: number;
// 时间设置
startTime?: number;
endTime?: number;
secondWidth?: number; // 每秒对应的像素宽度
snapInterval?: number;
snapToSeconds?: boolean;
// 功能开关
enableTimeIndicator?: boolean;
enableEventResize?: boolean;
enableEventSplit?: boolean;
enableContextMenu?: boolean;
readOnly?: boolean;
autoAddTrack?: boolean;
// 样式设置
colors?: Partial;
eventTextStyle?: Partial;
theme?: TimelinePlugin; // 初始主题
// 回调函数
onEventAdd?: (data: EventAddData) => void;
onEventUpdate?: (data: EventUpdateData) => void;
onEventClick?: (data: EventClickData) => void;
// ... 更多回调
}
```
## API 参考
### 核心方法
- **`addTrack()`**: 添加一个新的空轨道。
- **`removeTrack()`**: 移除最后一个轨道。
- **`addEvent(trackIndex, startTime, endTime, title, ...)`**: 向指定轨道添加事件。
- **`updateEvent(trackIndex, eventIndex, updates)`**: 更新现有事件。
- **`deleteEvent(trackIndex, eventIndex)`**: 删除事件。
- **`loadData(data)`**: 从 JSON 对象加载轨道和事件数据。
- **`setZoomLevel(level)`**: 设置缩放级别 (默认为 1.0)。
- **`setTimeIndicator(seconds)`**: 将时间指示器移动到指定时间。
- **`setTheme('light' | 'dark')`**: 切换内置主题。
### 插件
本库自带几个内置插件:
- **`DarkThemePlugin`**: 暗色模式主题。
- **`LightThemePlugin`**: 亮色模式主题 (默认)。
- **`ContextMenuPlugin`**: 添加右键菜单支持。
- **`PerformanceOverlayPlugin`**: 显示 FPS 和渲染时间,用于调试。
- **`EventMediaPlugin`**: 支持在事件内渲染媒体内容(图片、波形图)。
使用方法:
```typescript
import { Timeline, PerformanceOverlayPlugin } from "timeline-canvas";
const timeline = new Timeline("canvas-id");
timeline.usePlugin(new PerformanceOverlayPlugin());
```
## 开发
```bash
# 安装依赖
pnpm install
# 启动开发服务器
pnpm dev
# 构建库
pnpm build
# 运行文档站点
pnpm docs:dev
```
## MCP(面向 VS Code Copilot Chat)
本仓库提供一个最小可用的 MCP server(stdio),用于让 AI 以“工具调用”的方式完成:生成内置插件骨架、自动挂到导出、做基础校验、以及触发 allowlist 内的仓库脚本。
- 安装与启动(推荐):在仓库根目录执行 `pnpm install`,然后 `pnpm mcp`
- VS Code 配置示例:见 .vscode/mcp.json
- 说明与工具列表:见 packages/mcp-service/README_CN.md
> VS Code / Copilot Chat 的 MCP 配置入口可能随版本变化。核心是把一个 **stdio server** 配置为在 `packages/mcp-service` 目录启动(`pnpm start`),并将工作目录/环境变量指向仓库根目录(见 packages/mcp-service/README_CN.md)。
## 许可证
MIT