Timesheet.js 实战指南:用纯 JavaScript 快速构建 HTML5 时间表(Timesheet)可视化
前端数据可视化【免费下载链接】timesheet.jsJavaScript library for HTML5 CSS3 time sheets项目地址https://gitcode.com/gh_mirrors/ti/timesheet.js点击查看免费下载Timesheet.js 是一个零依赖的 Vanilla JS 时间表Timesheet / 时间轴渲染库只需引入一份 JS 与一份 CSS再传入一个描述事件的 JavaScript 数组就能在页面中生成带年份刻度、彩色时长气泡和日期标签的 HTML5 时间表。本文将以此仓库的 README.md 为骨架结合 source/javascripts/timesheet.js 源码与 test/timesheet.js 测试用例带你完整掌握 Timesheet.js 的接入方式、数据格式、渲染原理、主题定制以及基于 Grunt 的构建与本地开发流程。Timesheet.js 是什么Timesheet.js 的定位非常简单一个用来创建 HTML 时间表的轻量 JavaScript 库。按 package.json 中的描述它可以用 HTML5、JavaScript 和 CSS3 轻松创建简单的时间表、数据表或时间线是一个 Vanilla JS 库。它不依赖 jQuery也不需要任何框架核心源码只有 source/javascripts/timesheet.js 一个文件约 180 行并通过一个基于 Grunt HAML Express 的示例工程演示完整用法README 中写的是 Middleman但从仓库实际的 Gruntfile.js 与 serve.js 看示例站点实际由 Grunt、HAML 与 Express 驱动属于文档描述与构建脚本的出入此处以仓库源码为准。典型的使用场景包括个人履历/项目经历时间线、产品版本里程碑、历史事件可视化等——把某段时间内发生了什么、持续了多久用一行行的彩色气泡直观呈现出来。下面的效果截图就是仓库自带示例页面的渲染结果快速上手三步渲染一张时间表1. 引入 JS 与 CSSREADME 给出的引入方式是link relstylesheet typetext/css hrefdist/timesheet.css / script srcdist/timesheet.js typetext/javascript/script补充一点实现层面的说明README 中写的是dist/timesheet.js与dist/timesheet.css而当前仓库通过 Gruntfile.js 构建出的实际产物为压缩版dist/timesheet.min.js、dist/timesheet.min.css以及白色主题dist/timesheet-white.min.cssbower.json 的main字段也明确指向dist/timesheet.min.js与dist/timesheet.min.css。因此在实际使用时请以grunt构建后生成的dist/目录内文件名为准。2. 在页面放置占位元素div idtimesheet/divTimesheet 会向这个容器内写入年份刻度.scale和事件数据列表.data并把容器的className设置为timesheet color-scheme-default。3. 用new Timesheet(...)初始化构造函数签名来自 source/javascripts/timesheet.js为new Timesheet(container, min, max, data)container可以是容器元素的id字符串也可以是 DOM 元素本身min/max时间轴覆盖的起始与结束年份data事件数组格式见下一节。README 中的完整初始化示例new Timesheet(timesheet, 2002, 2013, [ [2002, 09/2002, A freaking awesome time, lorem], [06/2002, 09/2003, Some great memories, ipsum], [2003, Had very bad luck], [10/2003, 2006, At least had fun, dolor], [02/2005, 05/2006, Enjoyed those times as well, ipsum], [07/2005, 09/2005, Bad luck again, default], [10/2005, 2008, For a long time nothing happened, dolor], [01/2008, 05/2009, LOST Season #4, lorem], [01/2009, 05/2009, LOST Season #4, lorem], [02/2010, 05/2010, LOST Season #5, lorem], [09/2008, 06/2010, FRINGE #1 #2, ipsum] ]);同一份数据也以代码片段的形式保存在 source/snippets/example-date.js并在示例页source/javascripts/main.js中通过Lib.ready见 source/javascripts/lib.js一个约 9ms 轮询的 DOM-ready 工具等待页面就绪后执行。数据格式详解日期、标签与分类Timesheet.js 的事件数据是一个二维数组每一条目支持三种形态解析逻辑位于 source/javascripts/timesheet.js 的parse()方法条目形态含义示例[start, end, label, category]有起止时间的事件4 个元素[02/2005, 05/2006, Enjoyed those times as well, ipsum][start, label, category]无结束时间但指定分类3 个元素如[2003, Had very bad luck, default][start, label]无结束时间、使用默认分类2 个元素[2003, Had very bad luck]其中start与end支持两种日期格式解析逻辑见 parseDate()纯年份2002表示从该年 1 月 1 日开始解析后不带月份标记年月09/2002月份在前、年份在后MM/YYYY表示 2002 年 9 月解析后带月份标记date.hasMonth true。几个值得注意的行为自动扩展年份范围parse()中如果发现某个事件的起始年份早于min或结束年份晚于max会自动更新this.year.min / this.year.max保证所有事件都能完整显示在时间轴上无结束日期的事件只有开始日期时渲染为一个点状气泡默认仅 1 个月宽度data-duration属性渲染气泡时源码会在span.bubble上写入data-duration属性其值为Math.round((end - start) / 1000 / 60 / 60 / 24 / 39)即以 39 天为单位的粗略时长估算。这是源码级实现细节README 并未将其作为对外 API 承诺。渲染原理从数据到 HTML 的完整链路new Timesheet(...)的执行流程source/javascripts/timesheet.js分两步drawSections()根据min到max的年份区间生成div classscale内的多个section年/section年份列并设置容器类名insertData()遍历解析后的数据为每条事件计算气泡的起始偏移与宽度生成ul classdata下的li行每行结构为li span stylemargin-left: ...px; width: ...px; classbubble bubble-类型>赞分享前端数据可视化【免费下载链接】timesheet.jsJavaScript library for HTML5 CSS3 time sheets项目地址https://gitcode.com/gh_mirrors/ti/timesheet.js点击查看免费下载相关推荐Timesheet.js完整指南快速构建精美时间轴数据可视化Timesheet.js完整指南快速构建精美时间轴数据可视化 Timesheet.js是一个强大的JavaScript库专门用于创建HTML5时间轴数据可视前端数据可视化从时间轴到可视化Timesheet.js核心算法与实战指南从时间轴到可视化Timesheet.js核心算法与实战指南 你是否还在为项目进度可视化烦恼Timesheet.js作为轻量级JavaScript时间轴库仅前端数据可视化终极指南如何用 Timesheet.js 快速创建惊艳的时间轴图表终极指南如何用 Timesheet.js 快速创建惊艳的时间轴图表 Timesheet.js 是一款基于 HTML5 和 CSS3 的 JavaScript前端数据可视化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

支持任意邮箱发送邮件:SMTP配置驱动与避坑指南

支持任意邮箱发送邮件:SMTP配置驱动与避坑指南

简介:这份Android源码资源聚焦于「不依赖系统Mail客户端、直接向任意邮箱发送邮件」的实现方案,面向具备一定Android开发基础、希望掌握SMTP邮件发送能力的开发者。资源通过对比调用系统Mail客户端与使用SMTP协议两种方式,重点讲解后者如何借…

2026/10/15 18:13:25 阅读更多 →
Android SMTP 邮件发送实战:源码解析与避坑指南

Android SMTP 邮件发送实战:源码解析与避坑指南

简介:这份Android源码资源聚焦于不依赖系统Mail客户端的邮件发送方案,面向需要集成邮件功能的Android开发者,尤其适合希望摆脱手机必须安装邮件客户端这一限制的中级学习者。资源核心围绕SMTP协议展开,通过引入mail.jar、activati…

2026/10/15 18:13:25 阅读更多 →
OmniDrive安全机制揭秘:逆向MT1959的AES-CMAC签名验证与固件完整性绕过

OmniDrive安全机制揭秘:逆向MT1959的AES-CMAC签名验证与固件完整性绕过

【免费下载链接】OmniDrive 项目地址: https://gitcode.com/gh_mirrors/omn/OmniDrive 点击查看 免费下载 OmniDrive 是一款针对 MediaTek MT1959 光驱芯片的固件修改(modding)项目,让 Hitachi-LG 系光驱(LG BU40N、A…

2026/10/15 18:13:25 阅读更多 →

最新新闻

【ESP32笔记】ESP中的分区表

【ESP32笔记】ESP中的分区表

本节目标:看懂分区表 CSV 的每一列,会给工程添加自定义分区,并用 esp_partition API 完成擦除、写入、读取一、本节要解决的问题 ESP32 的程序不是"整个 bin 一股脑烧到某个固定地址",而是把整块 flash 划分成多个分区&…

2026/10/15 19:04:55 阅读更多 →
亲和路由(inspect)

亲和路由(inspect)

Inspect 要解决的是“多轮对话在普通选路下被分到不同渠道”导致缓存失效和兼容性出错的问题;它通过回答“值不值得亲和、按什么粒度分组、用哪些稳定字段”三个问题,输出分类、触发原因和内容哈希;它被设计成无外部状态的纯分析器&#xff0…

2026/10/15 19:04:55 阅读更多 →
AI本体建模-------GB/T 48000.3—2026 标准详解

AI本体建模-------GB/T 48000.3—2026 标准详解

AI本体建模之 GB/T 48000.3—2026 标准详解 当大模型与 Agent 逐渐成为企业基础设施,真正的护城河正从「数据」转向「可被机器理解、推理、校验、共享的知识」。而 本体(Ontology) 正是这套知识体系的「模式层」与「契约层」。 2026 年 1 月&…

2026/10/15 19:04:55 阅读更多 →
线上 Redis 慢查询,不一定就是命令本身慢

线上 Redis 慢查询,不一定就是命令本身慢

上周值班的时候,监控突然弹出 Redis 慢查询告警,慢查询日志里全是 HGETALL,单条耗时经常冲到 80ms 以上。第一反应,又是经典问题,大 Hash 别用 HGETALL,这个知识点群里都说烂了。 一开始我也是这么处理的&a…

2026/10/15 19:04:55 阅读更多 →
有效三角形个数:排序+双指针经典算法详解

有效三角形个数:排序+双指针经典算法详解

做算法题的时候有一种快乐是:题目本身只有一行描述,但背后藏着一整类优化思路。有效三角形个数就是这样——表面上是几何问题,实际上是排序和双指针的经典练兵场,也是我算法题解系列第五篇想重点讲透的题目。题目很直白&#xff1…

2026/10/15 19:04:55 阅读更多 →
SDSegmentedControl避坑指南:iOS 6/7兼容处理、IB集成技巧与现代化改造建议

SDSegmentedControl避坑指南:iOS 6/7兼容处理、IB集成技巧与现代化改造建议

【免费下载链接】SDSegmentedControl A drop-in remplacement for UISegmentedControl that mimic iOS 6 AppStore tab controls 项目地址: https://gitcode.com/gh_mirrors/sd/SDSegmentedControl 点击查看 免费下载 SDSegmentedControl 是一个可以直接替换系统 U…

2026/10/15 19:02:09 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →