I amQiana , WELCOME.

NO TRY , NO HIGH

D3.js && SVG

最近刚接触到D3.js与SVG,简单记录下所看所学。


D3

  • 简介

D3即Data-Driven-Documents,是一个以数据驱动文档的javaScript类库。数据来源于你,而文档就是基于Web 的文档(或者网页),代表可以在浏览器中展现的一切,比如HTML、SVG。D3 扮演的是一个驱动程序的角色,因为它联系着数据和文档.
Alt text
上面的图片都是用D3写出来的,不明觉厉啊。

官网解释如下:

D3.js is a JavaScript library for manipulating documents based on data. D3 helps you bring data to life using HTML, SVG, and CSS. D3’s emphasis on web standards gives you the full capabilities of modern browsers without tying yourself to a proprietary framework, combining powerful visualization components and a data-driven approach to DOM manipulation.

D3.js是一个JavaScript库,它可以通过数据来操作文档。D3可以通过使用HTML、SVG和CSS把数据鲜活形象地展现出来。D3严格遵循Web标准,因而可以让你的程序轻松兼容现代主流浏览器并避免对特定框架的依赖。同时,它提供了强大的可视化组件,可以让使用者以数据驱动的方式去操作DOM。

简单的说,D3.js主要是一个用于前端来操作数据的JavaScript库。它通过使用HTML、SVG、CSS来给数据注入生命,即转换为各种简单易懂又美观的图形。

  • 搭建环境

我们可以在 官网下载最新版本的D3.js,也可以在 github 上下载之前的版本。
下载并且解压缩后,会得到3个文件:d3.js、d3.min.js和LISENSE文件。
在开发过程中,建议使用d3.js,它可以帮你深入到D3库中跟踪调试JavaScript代码。
生产环境中,建议使用d3.min.js,它更加节省资源。
想要了解更多可参考 stackoverflow
要使用D3.js,只需要将其引入到html中即可。

  • 优点
  1. 开源 github链接
    可以在github上看到D3有多受欢迎。
  2. 大量示例及文档
    • D3 gallery 这里有不少有趣的例子,可以帮你在线查找D3的使用方法,有各种各样的图表、特定的技术,还有一些跟其他工具一起实现的示例。
    • Mike Bostock 是个D3示例站点,作者是Mike Bostock,这个站点里有很多有趣的例子。
    • BioVisualize 算是一个分门别类的D3 gallery,可以帮你快速地在线查找你想要的例子。
    • D3教程 有很多朋友不断更新提供的教程、讨论和文档,给你细致地演示了D3的使用方法。
    • D3插件 可能有些你需要的功能是D3没有的。在你自己实践之前,先查查D3的插件库,它提供了各种常用的、不常用的功能。
    • D3 API 是很不错的文档。这里你能找到D3所提供的全部功能、属性的详细说明。
    • JS Bin 是个在线的D3测试、实验环境。你可以很容易地通过该工具跟其他人分享一些简单的代码。
    • JS Fiddle 跟JS Bin差不多,也是一个在线JavaScript代码分享平台。
  3. 强大的社区支持
    • Google D3讨论社区 这是个官方的用户组,不单单有D3,还有一些其他相关的库。
    • **Stackoverflow 搜索d3相关问题,一般都能快速找到解决方法。

SVG

  • 简介

SVG即”Scalable Vector Graphics”,可以理解成“可缩放矢量图形”。是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。与屏幕分辨率无关, 体积上能使用Gzip的方式压缩, 而且修改编辑都很方便。
各浏览器对其的支持,更多可参考canIUse

Alt text

与其他位图相比,有如下优势:

  1. SVG可被非常多的工具读取和修改(比如记事本)
  2. SVG与JPEG和GIF图像比起来,尺寸更小,且可压缩性更强。
  3. SVG是可伸缩的
  4. SVG图像可在任何的分辨率下被高质量地打印
  5. SVG可在图像质量不下降的情况下被放大
  6. SVG图像中的文本是可选的,同时也是可搜索的(很适合制作地图)
  7. SVG可以与Java技术一起运行
  8. SVG是开放的标准
  9. SVG文件是纯粹的XML

Alt text
上图展示了位图与SVG图在浏览器显示的效果。

  • 如何使用

SVG是纯粹的XML文件,要将其嵌入到HTML中,有如下方式:


img,需要注意的是,使用这种方法在交互性上有很多的限制,如不能使用JS来控制。

<img src="/path/*.svg"  width="300" />

Background-image,最好不要使用base64编码来格式化SVG图片,因为它在加载完前会阻塞其它资源的下载。
需要注意的是,使用这种方法在交互性上有很多的限制,如不能使用JS来控制。

.logo {
  background-image: url(/path/*.svg);
  background-size: 300px;
}

iframe。

<iframe src="/path/*.svg">balabala...</iframe>

Embed,早期用的很多。

<embed type="image/svg+xml" src="/path/*.svg" />

Object,是SVG使用方法中很好的一个选择,如果你想使用JS来进行交互控制的话。 只需要把它放到HTML中就行了。

<object type="image/svg+xml" data="/path/*.svg">balabala</object>

svg,直接使用svg标签,通过代码将SVG图像嵌入到HTML代码中。直接在HTML页面中嵌入SVG,而不是像前面几种方式那样,将SVG图像文件嵌入到页面当中。
你可以设置width和height值,控制SVG图像的宽度和高度。还可以通过CSS给其定义一些样式,实现一些样式效果。

<svg width="579" height="220" viewBox="0 0 579 220">
......
</svg>

基于D3的工具

  • 如果你使用D3,但又不想写代码,可以考虑一些基于D3的工具.个人推荐: NVD3
    它是一个可重用的D3图表。NVD3提供了很多漂亮的示例,不用像在D3里那样编写代码就可以定制很多效果。