我正在使用 SVG 和 JavaScript/jQuery 开发交互式界面,我正在尝试在Raphael和jQuery SVG之间做出决定。我想知道
- 两者之间的取舍是什么
- 发展势头似乎在哪里。
我不需要 Raphael 中的 VML/IE 支持,也不需要 jQuery SVG 的绘图能力。我主要对在 SVG 画布上创建、动画和操作单个项目的最优雅的方式感兴趣。
我正在使用 SVG 和 JavaScript/jQuery 开发交互式界面,我正在尝试在Raphael和jQuery SVG之间做出决定。我想知道
我不需要 Raphael 中的 VML/IE 支持,也不需要 jQuery SVG 的绘图能力。我主要对在 SVG 画布上创建、动画和操作单个项目的最优雅的方式感兴趣。
我最近使用了 Raphael 和 jQuery SVG - 以下是我的想法:
优点:一个很好的入门库,很容易用 SVG 快速做很多事情。写得很好,有据可查。大量示例和演示。非常可扩展的架构。非常适合动画。
缺点:是实际 SVG 标记之上的一个层,使得使用 SVG 做更复杂的事情变得困难 - 例如分组(它支持集合,但不支持组)。在编辑现有元素时效果不佳。
优点:一个 jquery 插件,如果你已经在使用 jQuery。写得很好,有据可查。大量示例和演示。支持大多数 SVG 元素,允许轻松本地访问元素
缺点:架构不如 Raphael 可扩展。有些事情可以更好地记录(例如配置 SVG 元素)。在编辑现有元素时效果不佳。动画依赖于 SVG 语义——这不是很好。
SnapSVG 是 Raphael 的继任者。它仅在支持 SVG 的浏览器中受支持,并且几乎支持 SVG 的所有功能。
如果您要快速轻松地做某事,Raphael 是一个简单的选择。如果您要做更复杂的事情,我选择使用 jQuery SVG,因为我可以比使用 Raphael 更容易地操作实际标记。如果你想要一个非 jQuery 解决方案,那么 SnapSVG 是一个不错的选择。
对于后人,我想指出我最终选择了 Raphael,因为干净的 API 和“免费”的 IE 支持,还因为积极的开发看起来很有希望(例如,事件支持刚刚在 0.7 中添加)。但是,我不会回答这个问题,我仍然有兴趣了解其他人使用 Javascript + SVG 库的经验。
我是 Raphael 的忠实粉丝,开发势头似乎很强劲(上周晚些时候发布了 0.85 版)。另一个很大的优点是它的开发者Dmitry Baranovskiy目前正在开发一个 Raphael 图表插件g.raphael,它看起来非常漂亮(在Flickr上有一些早期版本的输出示例) .
然而,为了在 SVG 库组合中加入另一个可能的竞争者,Google 的SVG Web看起来确实很有前途(尽管我不是 Flash 的忠实粉丝,它用于在不兼容 SVG 的浏览器中呈现)。可能值得一看,尤其是即将举行的SVG Open 会议。
Raphael 肯定更容易设置和开始,但请注意,在 SVG 中表达事物的方式在 Raphael 中是不可能的。如上所述,没有“组”。这意味着您无法实现坐标变换层。相反,只有一个坐标变换可用。
如果您的设计依赖于嵌套坐标变换,那么 Raphael 不适合您。
哦,拉斐尔自 6 月以来取得了长足的进步。有一个新的图表库可以使用它,这些非常引人注目。Raphael 还支持完整的 SVG 路径语法,并结合了非常先进的路径方法。在我的站点(无耻插件)上查看 1.2.8+,然后从那里跳到 Dmitry 的站点。 http://www.irunmywebsite.com/raphael/raphaelsource.html
我认为这并非完全无关,但您是否考虑过画布?Process JS之类的东西可以使它更简单。
您还应该看看 svgweb。它使用 flash 在 IE 中呈现 svg,并且可以选择在其他浏览器上呈现(在它支持比浏览器本身更多的情况下)。
我将投票支持 Raphael - 跨浏览器支持、干净的 API 和一致的更新(到目前为止)使它成为一种乐趣。它也可以很好地与 jQuery 配合使用。处理很酷,但作为目前最前沿的东西的演示更有用。
作为一个 Javascript 初学者,我发现 Rapahel 示例并不容易,我推荐 http://cancerbero.mbarreneche.com/raphaeltut,这是一个真正的分步教程。
对于那些不关心 IE6/IE7 的人来说,编写 Raphael 的那个人专门为现代浏览器构建了一个 svg 引擎:Snap.svg .. 他们有一个非常好的网站,有很好的文档:http ://snapsvg.io
snap.svg 开箱即用再简单不过了,它可以操作/更新现有的 SVG 或生成新的 SVG。您可以在 snap.io 的 about 页面上阅读这些内容,但这里有一个简短的介绍:
缺点
优点
实现 SVG 的全部功能,如遮罩、剪辑、图案、完整渐变、组等。
使用现有 SVG 的能力:内容不必使用 Snap 生成即可与 Snap 一起使用,允许您使用任何常用设计工具创建内容。
使用简单、易于实现的 JavaScript API 提供完整的动画支持
处理 SVG 字符串(例如,通过 Ajax 加载的 SVG 文件),而无需先实际渲染它们,类似于资源容器或精灵表。
如果您有兴趣,请查看:http: //snapsvg.io
因为这里还没有提到:您还应该看看Dojox.drawing,它也提供了很好的 SVG 绘图功能。它有一组非常令人印象深刻的功能。我只是用它开始一个项目,但在我看来,它(至少在功能方面)远远优于 Raphael 和 JQuerySVG。
该演示文稿说服我使用它而不是 Raphael/JQuerySVG: http ://www.slideshare.net/elazutkin/dojo-gfx-svg-in-the-real-world-2114082
参考: http ://dojotoolkit.org/reference-guide/dojox/index.html
Dojocampus 参考:http: //docs.dojocampus.org/dojox/drawing
下载 Dojo(包括 Dojox): http ://dojotoolkit.org/download/
您可能想要查看的另一个 svg javascript 库是 d3.js。http://d3js.org/
我更喜欢使用 RaphaelJS,因为它具有出色的跨浏览器功能。但是,某些 SVG 和 VML 效果无法使用 RaphaelJS(复杂渐变...)实现。
Google 还开发了自己的库以在 IE 中启用 SVG 支持:http: //svgweb.googlecode.com/files/svgweb-2009-08-20-B.zip
如果您不需要 VML 和 IE8 支持,请使用 Canvas(例如 PaperJS)。查看适用于 Windows 7 的最新 IE10 演示。它们在 Canvas 中有令人惊叹的动画。SVG 无法做任何接近它们的事情。整体 Canvas 可在所有移动浏览器上使用。SVG 在 Android 2.0-2.3 的早期版本中不起作用(据我所知)
是的,Canvas 不可扩展,但速度如此之快,以至于您可以更快地重绘整个画布,然后浏览器能够滚动视口。
从我的角度来看,微软的优化提供了将 Canvas 用作常规 GDI 引擎并实现图形应用程序的方法,就像我们现在为 Windows 所做的那样。