jQuery SVG vs. Raphael [cerrado]


254

Estoy trabajando en una interfaz interactiva usando SVG y JavaScript / jQuery, y estoy tratando de decidir entre Raphael y jQuery SVG . Me gustaría saber

  1. Cuáles son las compensaciones entre los dos
  2. Donde parece estar el impulso del desarrollo.

No necesito el soporte VML / IE en Raphael, o las capacidades de trazado de jQuery SVG. Me interesa principalmente la forma más elegante de crear, animar y manipular elementos individuales en un lienzo SVG.

Respuestas:


194

Recientemente he usado tanto Raphael como jQuery SVG, y aquí están mis pensamientos:

Rafael

Pros: una buena biblioteca de inicio, fácil de hacer MUCHAS cosas con SVG rápidamente. Bien escrito y documentado. Muchos ejemplos y demostraciones. Arquitectura muy extensible. Genial con la animación.

Contras: es una capa sobre el marcado SVG real, hace que sea difícil hacer cosas más complejas con SVG, como la agrupación (admite Conjuntos, pero no grupos). No funciona muy bien con la edición de elementos ya existentes.

jQuery SVG

Pros: un complemento jquery, si ya está utilizando jQuery. Bien escrito y documentado. Muchos ejemplos y demostraciones. Admite la mayoría de los elementos SVG, permite el acceso nativo a los elementos fácilmente

Contras: arquitectura no tan extensible como Rafael. Algunas cosas podrían estar mejor documentadas (como configurar el elemento SVG). No funciona muy bien con la edición de elementos ya existentes. Se basa en la semántica SVG para la animación, lo que no es tan bueno.

SnapSVG como una versión SVG pura de Raphael

SnapSVG es el sucesor de Raphael. Solo se admite en los navegadores habilitados para SVG y admite casi todas las características de SVG.

Conclusión

Si está haciendo algo rápido y fácil, Raphael es una opción fácil. Si vas a hacer algo más complejo, elegí usar jQuery SVG porque puedo manipular el marcado real significativamente más fácil que con Raphael. Y si desea una solución que no sea jQuery, entonces SnapSVG es una buena opción.


15
La documentación de RaphaelJS tampoco es tan buena, es limitada y a veces tienes que ir a la documentación de SVG o jQuery para obtener toda la información. Dicho esto, con el demo (código fuente) disponible, así como el foro y muchos usuarios, logro obtener las respuestas que necesito.
Roalt

11
Yo sólo he empezado a utilizar Rafael y encontré la documentación a ser algunos de los mejores que he encontrado para una API de JavaScript, con ejemplos muy claros al lado de las especificaciones más formales
wheresrhys

71
No olvide que RaphaelJS tiene compatibilidad con VML para Internet Explorer. Eso es ENORME porque SVG no funciona en los navegadores más antiguos.
strongriley

3
La pregunta era específicamente sobre SVG, no sobre compatibilidad con versiones anteriores. Si el deseo es gráficos vectoriales entre navegadores, estás en lo correcto.
Anatoly G

44
Otra desventaja de jQuery SVG es que el proyecto, aunque el proyecto es Openoucer (GPL y MIT) parece ser abandonado por su desarrollador (versión 1.4.5 última actualización 28 de abril de 2012). jquery.svg.dom causa algunos conflictos con jQuery 1.8. Lo ideal sería esperar a que alguien se haga cargo del proyecto y esperemos que lo puso en GitHub
Hoffmann

53

Para la posteridad, me gustaría señalar que terminé eligiendo Raphael, debido a la API limpia y al soporte de IE "gratuito", y también porque el desarrollo activo parece prometedor (el soporte de eventos se agregó en 0.7, por ejemplo). Sin embargo, dejaré la pregunta sin responder, y todavía estaría interesado en escuchar sobre las experiencias de otros usando las bibliotecas Javascript + SVG.


1
El buen soporte de IE para Raphael es genial. Cuadrados con esquinas redondeadas en IE? ... no hay problema;)
Peter Ajtai

26

Soy un gran admirador de Raphael y el impulso de desarrollo parece estar fortaleciéndose (la versión 0.85 se lanzó a fines de la semana pasada). Otra gran ventaja es que su desarrollador, Dmitry Baranovskiy , actualmente está trabajando en un plugin de gráficos Raphael, g.raphael , que parece ser bastante ingenioso (hay algunas muestras del resultado de las primeras versiones en Flickr ) .

Sin embargo, solo para lanzar otro posible contendiente a la mezcla de la biblioteca SVG, la web SVG de Google parece muy prometedora (aunque no soy un gran fanático de Flash, que utiliza para renderizar en navegadores que no cumplen con SVG). Probablemente uno para ver, especialmente con la próxima conferencia abierta SVG .


1
Es Rafael v. 1.5.2 en este momento.
topright gamedev

3
No es gran cosa notar que la versión actual es 2.1.2. Este comentario está esperando que otro tipo lo corrija en unos años ...
Tebe

Kopat 'Sho Ya Nashel, unos años más tarde ... Es Raphael v2.2.1 ahora
Nathangrad

12

Raphael es definitivamente más fácil de configurar y poner en marcha, pero tenga en cuenta que hay formas de expresar cosas en SVG que no son posibles en Raphael. Como se señaló anteriormente, no hay "grupos". Esto implica que no puede implementar capas de Transfomations de coordenadas. En cambio, solo hay una transformación de coordenadas disponible.

Si su diseño depende de transformaciones de coordenadas anidadas, Raphael no es para usted.


11

Oh Raphael ha avanzado significativamente desde junio. Hay una nueva biblioteca de gráficos que puede funcionar con ella y estos son muy llamativos. Raphael también es compatible con la sintaxis de ruta SVG completa y está incorporando métodos de ruta realmente avanzados. Ven a ver 1.2.8+ en mi sitio (Shameless plug) y luego salta al sitio de Dmitry desde allí. http://www.irunmywebsite.com/raphael/raphaelsource.html


6

Creo que no está totalmente relacionado, pero ¿consideró el lienzo? algo como Process JS puede simplificarlo.


12
He mirado tanto el lienzo en general como el procesamiento en particular. El problema es que (hasta donde yo sé) los eventos del mouse no se pueden adjuntar fácilmente a elementos individuales en el lienzo, para funciones como arrastrar y soltar, a diferencia de SVG, que está completamente expuesto al DOM.
Luke Dennis

1
No he hecho un trabajo extenso con el lienzo, pero eche un vistazo al complemento Flot - jquery que usa el lienzo para los gráficos. Maneja los mouseclicks bastante bien.
Bharani

44
Mouseclicks sí, pero no eventos dom en elementos en el lienzo. De hecho, para Canvas no puedes poner el controlador de eventos en el canvas (debido a IE), aunque puedes ponerlo en un div que contenga el canvas.
Nosredna

3
Canvas es ideal para mapas de bits, SVG es ideal para gráficos vectoriales. La capacidad de SVG para escalar es fantástica para eso. Creo que Canvas y SVG son tecnologías complementarias.
Anatoly G

Con respecto a los eventos del mouse para el lienzo, eche un vistazo a Easel.js, que maneja todo esto por usted.
Neil


5

Daré mi voto a favor de Raphael: el soporte para varios navegadores, la API limpia y las actualizaciones consistentes (hasta ahora) hacen que sea un placer usarlo. También juega muy bien con jQuery. El procesamiento es genial, pero más útil como demostración para cosas de vanguardia en este momento.



5

Para aquellos que no se preocupan por IE6 / IE7, el mismo tipo que escribió Raphael creó un motor de svg específicamente para navegadores modernos: Snap.svg ... tienen un sitio realmente agradable con buenos documentos: http://snapsvg.io

snap.svg no podría ser más fácil de usar desde el primer momento y puede manipular / actualizar SVG existentes o generar nuevos. Puede leer estas cosas en la página acerca de snap.io, pero aquí hay un resumen rápido:

Contras

  • Para utilizar las funciones de snap, debe renunciar a la compatibilidad con navegadores antiguos. Raphael admite navegadores como IE6 / IE7, las funciones de complemento solo son compatibles con IE9 y versiones posteriores, Safari, Chrome, Firefox y Opera.

Pros

  • Implementa las características completas de SVG como enmascaramiento, recorte, patrones, gradientes completos, grupos y más.

  • Capacidad para trabajar con SVG existentes: el contenido no tiene que generarse con Snap para que funcione con Snap, lo que le permite crear el contenido con cualquier herramienta de diseño común.

  • Soporte completo de animación utilizando una API de JavaScript sencilla y fácil de implementar

  • Funciona con cadenas de SVG (por ejemplo, archivos SVG cargados a través de Ajax) sin tener que renderizarlos primero, de forma similar a un contenedor de recursos o una hoja de sprite.

échale un vistazo si estás interesado: http://snapsvg.io


3

Como todavía no se menciona aquí: también debe echar un vistazo a Dojox.drawing , que también proporciona buenas capacidades de dibujo SVG. Tiene un conjunto de características bastante impresionante. Estoy comenzando un proyecto con él, pero me parece que es muy superior (al menos en términos de características) a Raphael y JQuerySVG.

Esta presentación me convenció de usarlo en lugar de Raphael / JQuerySVG: http://www.slideshare.net/elazutkin/dojo-gfx-svg-in-the-real-world-2114082

Referencia: http://dojotoolkit.org/reference-guide/dojox/index.html

Referencia en Dojocampus: http://docs.dojocampus.org/dojox/drawing

Descargar Dojo (incluido Dojox): http://dojotoolkit.org/download/




0

Si no necesita compatibilidad con VML e IE8, utilice Canvas (PaperJS, por ejemplo). Mira las últimas demostraciones de IE10 para Windows 7. Tienen animaciones increíbles en Canvas. SVG no es capaz de hacer nada cerca de ellos. Overall Canvas está disponible en todos los navegadores móviles. SVG no funciona en las primeras versiones de Android 2.0- 2.3 (como sé)

Sí, Canvas no es escalable, pero es tan rápido que puede volver a dibujar todo el lienzo más rápido que el navegador capaz de desplazar el puerto de vista.

Desde mi punto de vista, las optimizaciones de Microsoft proporcionan medios para usar Canvas como motor GDI normal e implementar aplicaciones gráficas como las hacemos ahora para Windows.


1
Para la representación gráfica pura, estoy totalmente de acuerdo. Lo único que ofrece SVG / VML que el lienzo no ofrece es un DOM y una jerarquía de eventos, ya que los elementos dibujados son objetos DOM completos en lugar de un mapa de bits sin formato. Con el lienzo, las coordenadas de clic X / Y son lo mejor que se puede hacer. En cualquier caso, el proyecto lleva mucho tiempo terminado, por lo que actualmente no es relevante, pero gracias por su respuesta. :)
Luke Dennis el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.