Exportación de rutas SVG a HTML para animar con JavaScript

Tengo un plano complejo, que tracé en Inkscape. Voy a animar la ruta mediante programación y también agregaré algunos otros efectos con JavaScript. Puedo incluir el archivo usando HTML (p. ej <img src="filename.svg"/>.), pero luego, ¿cómo manipulo cada ruta en ese archivo SVG?

Hasta ahora, lo que he estado haciendo es transferir manualmente los valores a HTML copiando y pegando (por ejemplo <svg><path d="x,y x,y x,y..."/>), luego puedo atribuir identificadores y clases a cada ruta y usar esos identificadores y clases para manipular las rutas usando JavaScript, pero es extremadamente pérdida de tiempo. Tiene que haber una forma mejor y más rápida de hacer esto.

Busqué en todas partes y solo pude encontrar instrucciones para exportar rutas usando Python, que no tengo instalado en este sistema Windows.

¿Hay alguna forma de hacer esto de forma nativa en Inkscape? ¿O alguna otra forma que conozcas?

Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .

Respuestas (1)

Si su objetivo es acceder al SVG desde su HTML (por ejemplo, para animar con JavaScript o diseñar con CSS), entonces necesita usar el SVG en línea (como para pegar el código SVG sin procesar en el HTML), si usa su SVG con una <img>etiqueta o como una imagen de fondo CSS, entonces no puede acceder al DOM de SVG desde su documento HTML.

La forma más fácil de incluir su archivo, si está utilizando un lenguaje del lado del servidor como PHP, es incluir el contenido del archivo; algo como:

<?php echo file_get_contents("my_svg.svg"); ?>

Eso literalmente imprimirá el contenido del SVG en el HTML, a diferencia de usar una <img>etiqueta que simplemente muestra la imagen.

Si está trabajando únicamente con HTML, entonces necesita copiar y pegar el código SVG en su HTML, pero puede copiar y pegar todo el SVG, sin necesidad de obtener pathatributos específicos ni nada. Dado que SVG es simplemente XML, puede abrir el archivo en un editor de texto (p. ej., Notepad o TextEdit) o ​​su editor de HTML y obtener el código.

Inkscape tiene un editor XML que puede serle útil, aunque no estoy seguro de que pueda copiar el código completo desde allí. También vale la pena señalar que Inkscape, de forma predeterminada, guarda los archivos como su propio tipo de SVG con algunas etiquetas y comandos específicos de Inkscape (tienen el espacio de nombres apropiado, por lo que no debería causar un problema, pero nunca se sabe), por lo que puede ser mejor guardar su archivo como SVG simple .

Puede leer más sobre el uso de SVG (y el acceso a SVG con JavaScript y CSS externos) en este artículo de CSS-Tricks (enlacé a la parte relevante del artículo):

Y una pregunta relacionada sobre Stack Overflow:

ok, déjame ver si entiendo esto correctamente. al usar esa función php, puedo imprimir la lista de nodos en el navegador y luego simplemente copiarlos y pegarlos todos?!?!
No, no hay necesidad de copiar/pegar nada, literalmente lo usa en su archivo (asumiendo que su sitio está usando PHP).
¿Cómo haría para copiar y pegar todo el archivo SVG? lo que he estado haciendo es seleccionar cada nodo uno por uno, uno tras otro, y copiar las posiciones X e Y de los nodos. Me voy a la cama, pero volveré mañana por la mañana.
con respecto a su respuesta, ¿pero dijo que necesitaría usar SVG en línea...?
Ese PHP literalmente imprime el SVG en el HTML para que esté en línea. O copia/pega directamente en su HTML, simplemente abra el SVG en un editor de texto (por ejemplo, el bloc de notas), seleccione todo, copie, pegue. No hay necesidad de copiar nodos individuales.
@user2230470 presione ctrl+a, luego ctrl+c y ctrl+v?
Re: Plain SVG vs Inkscape SVG, Inkscape coloca adecuadamente toda la información no estándar en el inkscapeespacio de nombres, que es un SVG perfectamente válido. La mayoría de las aplicaciones (y navegadores) no tienen problemas con eso y lo ignorarán. El SVG simple elimina toda esa información adicional y, por lo general, solo se necesita cuando una aplicación no funciona bien con el espacio de nombres adicional.
@Cai Gracias. No sabía que podía acceder al contenido del archivo abriéndolo en un editor de texto. Agregue eso a su respuesta y lo seleccionaré como la respuesta.
Inkscape tiene un XML-Viewer, en la barra de herramientas, para mí el cuarto desde la derecha, un símbolo de ventana con <> adentro, donde puede mostrar XML-Nodes por separado. Tal vez conveniente para usted. La parte de la imagen se marca sincrónicamente.