大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

基于 Canvas 的图表类库 Chart.js 0.1 发布

  • 2013-03-26
  • 本文字数:1183 字

    阅读完需:约 4 分钟

Nick Downie 于 3 月 17 日发布了一款基于 canvas 的 JavaScript 图表类库 Chart.js ,该类库基于 MIT 开源许可发布,是 SVG 图表类库的一种替代方案。

“我想创建一个开箱即用的图表解决方案,该解决方案提供简单且易于理解的 API,Web 设计者能够通过这些 API 实现美观的图表,同时它也需要足够的轻量便利,以便开发人员能够在复杂的 Web 应用中引用它”Downie 说。

Chart.js 暴露了 6 种不同的图表类型,它们建立在数据和选项相结合的 API 之上。Downie 花了一个月的时间为他这个大学期间最后的项目构建类库及支持文档。在 17 日开放源码之后,“我完全没有料到会有这么多的响应,真是惊呆了——我在 Hacker News 上发布了一个帖子,一天之后就有几万人访问了这个网站,同时 Github 上的问题和贡献收件箱都满了,”Downie 说。

与 SVG 图表类库不同的是, 对于每一个图表元素而言,chart.js 使用一个单独的 canvas 节点进行输出,而不是输出多个 DOM 节点。由于使用了单独的节点输出,所以 chart.js 只有一个事件监听器钩子,同时“保持对任何区域的跟踪都需要在内存中交互,在检查当前的鼠标位置时需要迭代这些内容。用户每次移动他们的鼠标时都需要加载整个循环。同时这也意味着如果我们直接在 canvas 上绘制工具提示那么需要对 canvas 进行清除和重画。”Downie 说。“谈到这方面的定制化,我认为要实现一个简单的能够满足所有人需要的 API 几乎不可能——有些人可能想要工具提示,其他人可能想要在图表上画线,还有人想要高亮数据点,各种需要不一而足。如果都满足那么它很快就会变得非常复杂,”Downie 说。与可能需要添加工具提示相比,Downie 更愿意推动 chart.js 成为一个替代方案,“让那些想要在自己的网站和应用中包含简单、静态图形的开发者使用 Chart.js,而不再使用过度复杂且超负载的解决方案(基于 SVG 的图表方案)”。

虽然简化 API 是 canvas 方式的一个优点,但是 Chart.js 失去了基于向量的 SVG 图表工具所具有的伸缩性,因为它依赖于 canvas 所产生的光栅图像。在这种情况下,“(为 canvas)声明基于百分比的 CSS 宽度进行响应布局。对于高 DPI 显示设备而言,Chart.js 会通过 CSS 自动地扩展到正确的设备像素比(devicePixelRatio)并缩放回正确的设备像素大小,”Downie 说。

Canvas 本身就具有通过 toDataUrl 导出 base64 图片的能力。“我希望在将来的发布版中能够向创建完成的图表中添加一些实用功能,这样用户便能够很容易地清除、更新或者导出图表了——本质上 Chart.js 会为这个功能提供一个封装,”Downie 说。

Downie 将在春天毕业,他希望向 Chart.js 中添加一些其他的功能,也希望能在毕业之后集中精力做好全职工作。“(Chart.js)给了我一个非常好的理由,让我能够同时设计并开发一些非常优雅的作品,并对 Web 设计社区中的人们有所帮助(希望如此)。”

查看英文原文 Canvas-Based Chart.js Version 0.1 Released

2013-03-26 03:313780
用户头像

发布了 321 篇内容, 共 132.8 次阅读, 收获喜欢 19 次。

关注

评论

发布
暂无评论
发现更多内容

PoseiSwap 将向 Zepoch 节点持有者发放新一轮空投,生态启动在即

鳄鱼视界

AI、机器学习、大模型、生成式AI和安全

啸天

人工智能 机器学习 安全 大模型 ChatGPT

华为云下载加速解决方案:让您的下载更快更稳定

YG科技

在 Go 中如何实现类似 Python 中的 with 上下文管理器

江湖十年

Go 后端

PoseiSwap 将向 Zepoch 节点持有者发放新一轮空投,生态启动在即

股市老人

PoseiSwap 将向 Zepoch 节点持有者发放新一轮空投,生态启动在即

西柚子

Java程序性能分析:开篇之jps

javalover123

Java 性能优化 性能 后端

趣解领域驱动设计-从地心说到日心说

凡语

领域驱动设计

边阅读,边成长

少油少糖八分饱

阅读 每天读本书 书评

98位企业技术高管入学百度AICA 大模型带来AI人才三大能力要求

飞桨PaddlePaddle

人工智能 百度 paddle 百度飞桨

代码随想录训练营Day04 - 链表(下)

jjn0703

py基础知识点归纳总结

全栈若城

Python 学习 基础

es笔记四之中文分词插件安装与使用

Hunter熊

中文分词 elasticsearch

2023-07-02:给定一个1~N的排列,每次将相邻两数相加,可以得到新的序列,长度是N-1 再对新的序列,每次将相邻两数相加,可以得到新的序列,长度是N-2 这样下去可以最终只剩一个数字 比如 :

福大大架构师每日一题

Go 福大大架构师每日一题

大厂月入3w+,失业焦虑折磨着我

程序员晚枫

程序员 大厂 焦虑

代码随想录训练营Day03- 链表(上)

jjn0703

“科创中国”大湾区青年百人会论坛成功举办

飞桨PaddlePaddle

人工智能 百度 paddle 百度飞桨

C++实现对RGB图片进行编码

芯动大师

ChatGLM2-6B环境搭建

IT蜗壳-Tango

C++中fork函数的使用及原理

芯动大师

我在AIGC和数字中台方面的架构升级设计

大东(AIP智能体运营专员)

PoseiSwap 将向 Zepoch 节点持有者发放新一轮空投,生态启动在即

BlockChain先知

Go 语言 context 都能做什么?

AlwaysBeta

Go Context go面试题

豫园股份基于低代码敏捷式开发的实践与落地

明道云

专科学历,有机会转行程序员吗?

程序员晚枫

程序员 面试 转行 学习计划

IoTLink版本更新V1.34.0

山东云则信息科技

Java Vue 后端 物联网 前段

基于Canvas的图表类库Chart.js  0.1发布_JavaScript_Tim Heckel_InfoQ精选文章