我试图为现代浏览器找到一个合适的SVG库 . 我的目标是决定,什么库适合创建简单的在线SVG编辑器,例如 . 文本和路径编辑和剪切文本与路径 .
我找到了两个可能合适的库: Snap.svg 和 Svg.js .
SNAP.SVG
Github:https://github.com/adobe-webplatform/Snap.svg
源代码行:6925 Github Stars:3445
Doc:http://snapsvg.io/docs/
入门:http://snapsvg.io/start/
入门示例(JSBIN)
var draw = Snap(800, 600);
// create image
var image = draw.image('/images/shade.jpg',
0, -150, 600, 600);
// create text
var text = draw.text(0,120, 'SNAP.SVG');
text.attr({
fontFamily: 'Source Sans Pro',
fontSize: 120,
textAnchor: 'left'
});
// clip image with text
image.attr('clip-path', text);
SVG.JS
Github:https://github.com/svgdotjs/svg.js
源代码行:3604 Github Stars:1905
Doc:https://svgdotjs.github.io/
入门示例(JSBIN):
var draw = SVG('drawing');
// create image
var image = draw.image('/images/shade.jpg');
image.size(600, 600).y(-150);
// create text
var text = draw.text('SVG.JS').move(300, 0);
text.font({
family: 'Source Sans Pro',
size: 180,
anchor: 'middle',
leading: '1em'
});
// clip image with text
image.clipWith(text);
用法似乎非常相似 .
这两个库之间的主要区别是什么?
3 回答
我是SVG.js的创建者(所以我必须尝试两者并看看哪种方式最适合你 . 使用SVG.js我会尝试保持语法更基于javascript,所以一切都更动态,而Snap经常使用基于字符串的语法这使得生成的代码在SVG.js中通常更具人性化,我显然更喜欢 . 让我们以渐变为例 .
SNAP.SVG:
SVG.JS:
Snap.svg语法更简洁,SVG.js代码更具可读性 . 所以这真的是品味问题 .
通常,SVG.js更加面向对象 . 一切都是一个阶级,甚至低至numbers和colors,因此是可扩展的 . 由于OO结构,在任何级别上都非常容易write plugins和extend existing objects .
我最初尝试Snap,因为它有一个不错的网站,看起来很好的文档 . 在几个我无法解释的问题之后,我决定尝试SVG.js.我无法确定原因,但SVG.js似乎更容易编写;更直观 . 我不是说Snap很糟糕,但它不符合我的风格,文档内容有点稀疏 .
我不确定你会得到一个公正的答案,因为大多数人都会有这样或那样的经历 .
因为它们本质上是基础SVG规范的接口,所以你应该能够用其中任何一个做大部分事情,所以我不会过于担心选择它们 . 解决方案将类似,而不是看到差异 .
我对Snap有很多经验(如此有偏见),但看看文档,我的印象是svg.js似乎对动画和文本等方面有更多的糖,而Snap可能对事物有更多的了解 . 就像Matrices一样(我发现它非常有用,因为我有时会挣扎),并且似乎支持一些额外的东西,比如触摸元素(我怀疑它们在某种程度上都可用,但部分依赖于浏览器支持,但是像svg)触摸支持可能变得越来越重要 .
最终,我只是在一个或另一个编码,而不是担心它 . 我想如果您了解SVG,如果您需要的话,您可以相对容易地在它们之间进行切换 .