Snap.svg so với Svg.js [đã đóng cửa]


77

Tôi đã cố gắng tìm một thư viện SVG thích hợp cho các trình duyệt hiện đại. Mục tiêu của tôi là quyết định, thư viện nào phù hợp để tạo trình soạn thảo SVG trực tuyến đơn giản với vd. chỉnh sửa văn bản và đường dẫn và cắt văn bản bằng đường dẫn.

Tôi tìm thấy hai thư viện, mà có thể phù hợp: Snap.svgSvg.js .


SNAP.SVG

Github: https://github.com/adobe-webplatform/Snap.svg Dòng
mã nguồn: 6925 Github Stars: 3445
Doc: http://snapsvg.io/docs/
Bắt đầu: http://snapsvg.io/start /
Ví dụ về người mới bắt đầu ( 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 Các
dòng mã nguồn: 3604 Github Stars: 1905
Doc: https://svgdotjs.github.io/

Ví dụ dành cho người mới bắt đầu ( 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);

Cách sử dụng dường như là khá giống nhau.

Sự khác biệt chính giữa hai thư viện này là gì?


14
Nó có thể là một câu hỏi dựa trên ý kiến, nhưng nó là một câu hỏi tuyệt vời và ý kiến ​​của những người đã thực sự sử dụng thư viện có thể tiết kiệm thời gian rất lớn cho những ai đang cố gắng quyết định đầu tư thời gian của họ vào đâu. Bên cạnh đó, hầu hết các câu trả lời trên SO đều dựa trên quan điểm.
isapir

2
@Igal, ngược lại, thời gian bị "lãng phí" bởi những câu hỏi dựa trên ý kiến ​​không được tiết lộ là ... không đáng kể. Ít nhất 56 người cho rằng câu hỏi này thực sự đáng giá.
KlaymenDK

1
@KlaymenDK Tôi nghĩ rằng hàng nghìn người đã thấy câu hỏi hữu ích vì nó đã được xem 19.257 lần. Hầu hết mọi người chỉ đơn giản là không bận tâm ủng hộ một câu hỏi hoặc câu trả lời ngay cả khi họ thấy nó hữu ích.
isapir

Câu trả lời:


81

Tôi là người tạo ra SVG.js (vì vậy tôi cũng thiên vị :). Bạn sẽ phải thử cả hai và xem những gì phù hợp với bạn nhất. Với SVG.js, tôi cố gắng giữ cho cú pháp dựa trên javascript nhiều hơn để mọi thứ linh hoạt hơn, trong khi Snap thường sử dụng cú pháp dựa trên chuỗi. Điều này làm cho mã kết quả thường dễ đọc hơn trong SVG.js, điều mà tôi rõ ràng là thích. Hãy lấy một gradient làm ví dụ.

SNAP.SVG:

var g = paper.gradient("L(0, 0, 100, 100)#000-#f00:25%-#fff");

paper.circle(50, 50, 40).attr({
  fill: g
});

SVG.JS:

var g = draw.gradient('linear', function(stop) {
  stop.at(0, '#000')
  stop.at(0.25, '#f00')
  stop.at(1, '#fff')
})

draw.circle(80).center(50,50).fill(g)

Cú pháp Snap.svg ngắn gọn hơn một chút, mã SVG.js dễ đọc hơn. Vì vậy, nó thực sự là một vấn đề của hương vị.

Nói chung SVG.js hướng đối tượng hơn nhiều. Tất cả mọi thứ đều là một lớp, thậm chí xuống sốmàu sắc và do đó có thể mở rộng. Do cấu trúc OO nên việc viết pluginmở rộng các đối tượng hiện có ở bất kỳ cấp độ nào là cực kỳ dễ dàng .


11
SVG.js dường như có một người sáng tạo rất được khuyến khích và hướng tới cộng đồng - cũng có thể là một điểm cộng! :) Tôi cũng thích cách viết mã chuỗi hơn là lược đồ "dựa trên chuỗi" của jQuery.
Florian Loch

@wout: Với svg.js trong tệp SVG, có thể chụp phần tử tài liệu thay vì chèn thêm phần tử không?
Williham Totland

2
@wout: Tác phẩm tuyệt vời! Tôi đã bắt đầu với snap.svg một tuần trước, nhưng tôi đã có một số nghi ngờ. Đọc qua tài liệu svg.js Tôi đang khám phá ra những thứ mà tôi thấy còn thiếu từ Snap, chẳng hạn như di chuyển tương đối. Và tôi thấy những thứ như viewbox, rbox, Use class, defs, các chức năng và bộ lọc nới lỏng hơn (với các plugin), hoạt ảnh lặp lại. Nhìn chung, nó có vẻ mô-đun và cởi mở hơn. Ngoài ra, tài liệu về svg.js có vẻ phức tạp và đầy đủ hơn. Tôi chỉ hy vọng svg.js hoạt động tốt như snap.svg, vì snap đang nhắm mục tiêu cụ thể đến các trình duyệt mới hơn. Bất kỳ suy nghĩ về điều này? Mọi người đã làm điểm chuẩn chưa?
Thijs Koerselman

1
@ 0x80 svg.js dễ dàng vượt trội hơn snap.svg. Một attr()thử nghiệm đơn giản trên jsperf cho thấy nó nhanh gấp ít nhất 5 lần: jsperf.com/raphael-vs-snapsvg-attr/3 . Cũng cần lưu ý rằng svg.js chỉ bằng một nửa kích thước của snap và như bạn đã tự nhận xét, có nhiều tính năng phong phú hơn.
wout

3
Hãy nhìn nó theo cách này, mọi thao tác của một phần tử đều được thực hiện thông qua attr()phương thức. Phương pháp này là trung tâm của sự thay đổi, vì vậy nếu nó chậm, hiệu suất tổng thể sẽ là cấp số nhân. Đối với Raphael vs Snap, cả hai thư viện đều có cùng tác giả. Về cơ bản Snap là Raphael 3.0 và nếu bạn nhìn vào mã, bạn sẽ thấy rất nhiều điểm tương đồng. Nó khiến tôi bối rối tại sao Snap hoạt động quá tệ, đặc biệt là với Adobe hỗ trợ nó.
wout

16

Ban đầu tôi đã thử Snap vì nó có một trang web đẹp và tài liệu có vẻ tốt. Sau một số vấn đề mà tôi không thể giải thích, tôi quyết định thử SVG.js. Tôi không thể xác định tại sao, nhưng SVG.js có vẻ dễ viết hơn; trực quan hơn. Tôi không nói rằng Snap tệ, nhưng nó không phù hợp với phong cách của tôi và tài liệu có nội dung hơi thưa thớt.


4
Tài liệu của Snap.svg cũng là một điểm đau đối với tôi. Nó được tạo tự động, thường để lại những thứ quan trọng cho người đọc. Ngoài ra, không tăng từ 0,3.0 (có vẻ hữu ích - chỉ tìm thấy một lỗi cho đến nay) có thể có nghĩa là thiếu động lực.
akauppi

Tôi không thể làm cho svg.js hoạt động. Bất cứ ai có một ví dụ làm việc?
David Spector

13

Tôi không chắc bạn sẽ nhận được một câu trả lời thiếu khách quan, vì hầu hết mọi người sẽ có kinh nghiệm về điều này hay điều khác.

Vì cả hai về cơ bản đều là giao diện với thông số SVG cơ bản, bạn sẽ có thể thực hiện hầu hết mọi thứ với một trong hai, vì vậy tôi sẽ không lo lắng quá nhiều về việc chọn. Các giải pháp sẽ giống nhau, thay vì thấy sự khác biệt.

Tôi có nhiều kinh nghiệm hơn với Snap (rất thiên vị), nhưng nhìn vào tài liệu, ấn tượng của tôi sẽ là svg.js dường như có nhiều đường hơn một chút đối với một số khía cạnh như hoạt ảnh và văn bản, trong khi có thể Snap có nhiều thứ hơn một chút như Ma trận (mà tôi thấy rất hữu ích vì đôi khi tôi phải vật lộn với những thứ đó) và dường như hỗ trợ một số thứ bổ sung như phần tử cảm ứng (tôi nghi ngờ chúng có sẵn ở cả hai bằng cách nào đó và một phần phụ thuộc vào sự hỗ trợ của trình duyệt, nhưng những thứ như hỗ trợ cảm ứng có thể ngày càng trở nên quan trọng với svg).

Cuối cùng, tôi chỉ muốn viết mã bằng cái này hay cái khác và không lo lắng về nó. Tôi nghĩ nếu bạn hiểu SVG, bạn sẽ có thể hoán đổi giữa chúng tương đối dễ dàng nếu bạn cần.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.