Каковы плюсы и минусы HTML5 Canvas против SVG + Raphael.js? - PullRequest
12 голосов
/ 23 августа 2010

Я только начал проект, используя Canvas.Но одна из вещей, которые мне нужны, это отслеживать подвижные кликабельные блоки, как в этом примере: http://raphaeljs.com/graffle.html, поэтому мне интересно, будет ли Raphael-js + SVG лучше.ты используешь?А почему?

Ответы [ 2 ]

23 голосов
/ 23 августа 2010

Этот ответ скопирован из моего ответа на другой вопрос.Но затем ОП изменил вопрос, и поэтому этот ответ стал менее актуальным для него.ИМХО, он более уместен в этом вопросе, поэтому здесь идет речь:


Думайте о разнице между canvas и svg как о разнице между Photoshop и Illustrator (или Gimp и Inkscape для вас, OSS, люди).Один имеет дело с растровыми изображениями, а другой - с векторной графикой.

С помощью canvas, поскольку вы рисуете в растровом изображении, вы можете легко размазывать, размыть, прожигать, уклоняться от изображений.Но поскольку это растровое изображение, вы не можете легко нарисовать линию, а затем принять решение о ее изменении.Вам нужно удалить старую линию, а затем нарисовать новую линию.

С помощью svg, поскольку вы рисуете векторы, вы можете легко перемещать, масштабировать, вращать, перемещать, переворачивать рисунки.Но так как это векторы, вы не можете легко размывать края в соответствии с толщиной линии или плавно соединять красный круг в синий квадрат.Вам необходимо смоделировать размытие, рисуя промежуточные многоугольники между объектами.

Иногда их варианты использования перекрываются.Например, многие люди используют canvas для создания простых линий и отслеживания объектов в виде структур данных в javascript.Но на самом деле они оба служат разным целям.Если вы попытаетесь реализовать векторное рисование общего назначения в чистом javascript поверх холста, я сомневаюсь, что вы будете быстрее, чем использовать svg, который, скорее всего, реализован в C.

5 голосов
/ 24 августа 2010

Несколько вещей, которые нужно решить - хотите ли вы, чтобы ваши вещи работали в мобильных браузерах? SVG (Рафаэль) не собирается работать на Android (не знаю, об iphone). И наоборот, если вы хотите что-то, что будет работать со старыми версиями Internet Explorer, canvas может не работать (не уверен, если ExCanvas поддерживает IE6), но SVG в некоторой степени работает (Raphael поддерживает IE6).

Кроме того, вы просто делаете анимацию / рисование или создаете полноценное приложение, которое может нуждаться в таких вещах, как кнопки, ползунки, контейнеры вкладок, списки, сетки и т. Д.

Если вы создаете законченное приложение и хотите, чтобы оно работало и на мобильных устройствах, вы можете воспользоваться инструментарием dojo, в частности dojox.gfx и другими графическими библиотеками dojox: http://archive.dojotoolkit.org/nightly/dojotoolkit/dojox/

dojox.gfx - это библиотека векторной графики, которая поддерживает несколько бэкэндов: canvas, SVG и даже silverlight. Вот статья, сравнивающая его с Рафаэлем: http://www.lrbabe.com/?p=217

Проверьте также файл cake.js для автономной библиотеки графов сцен для холста: http://code.google.com/p/cakejs/ А также ознакомьтесь с processingjs.

...