stringtranslate.com

Animación SVG

La animación de gráficos vectoriales escalables , un formato de gráficos vectoriales estándar abierto basado en XML , es posible a través de varios medios:

También se han escrito bibliotecas como complemento para brindar soporte SMIL a los navegadores actuales compatibles con SVG. [9] Este método también se conoce como SVG+Time. [ cita requerida ]

Dado que SVG admite gráficos de red portátiles (PNG) e imágenes rasterizadas JPEG , se puede utilizar para animar dichas imágenes como alternativa a APNG y gráficos de red de múltiples imágenes (MNG).

Historia

Los elementos de animación SVG se desarrollaron en colaboración con el grupo de trabajo que publicó varias versiones del lenguaje de integración multimedia sincronizada (SMIL). El grupo de trabajo SYMM (en colaboración con el grupo de trabajo SVG) desarrolló la especificación de animación SMIL, que representa un conjunto de características de animación XML de propósito general . SVG incorpora las características de animación definidas en la especificación de animación SMIL y proporciona algunas extensiones específicas de SVG.

En junio de 1998, el "Synchronized Multimedia Working Group" (conocido como "SYMM" [10] ) dentro del World Wide Web Consortium ("W3C") publicó la primera versión recomendada de la especificación conocida como "SMIL 1.0". [11] [12] Poco después de la publicación en 1998 de SMIL 1.0, un grupo de empresas liderado por Microsoft publicó " Timed Interactive Multimedia Extensions for HTML (HTML+TIME); Extending SMIL into the Web Browser ". [13] Durante los dos años siguientes, el autor principal de HTML+TIME (Patrick Schmitz) trabajó con el grupo de trabajo SYMM, mientras también trabajaba con el grupo de trabajo SVG. Poco después de la publicación de SMIL 2.0, Schmitz y el coautor Aaron Cohen (de Intel ) publicaron SMIL Animation el 4 de septiembre de 2001. [14] [15] SVG 1.0 también se convirtió en una recomendación del W3C el 4 de septiembre de 2001.

Algunos navegadores web añadieron compatibilidad con la animación SVG durante la década de 2000, incluido Amaya en 2003, pero la animación SVG solo fue compatible con los navegadores más utilizados a partir de la década de 2010, en particular con Firefox 4 (2011). Internet Explorer admite la animación ECMAScript y su sucesor, Microsoft Edge, admite animaciones ECMAScript y CSS a partir de la versión 42.17134.

Ejemplos

Los siguientes fragmentos de código demuestran tres técnicas para crear imágenes SVG animadas en navegadores compatibles. Las partes relevantes están resaltadas en amarillo. Haga clic en las miniaturas de las imágenes para ver sus versiones animadas.

Animación SVG usando SMIL

<?xml version="1.0" encoding="UTF-8" independiente="sí"?><svg version= "1.1" xmlns= "http://www.w3.org/2000/svg" xmlns:xlink= "http://www.w3.org/1999/xlink"    ancho= "100%" alto= "100%" viewBox= "-4 -4 8 8" >   <title>  Animación SVG  usando  SMIL </title> <circle cx= "0" cy= "1" r= "2" stroke= "rojo" fill= "ninguno" >      <animateTransformar atributoName= "transformar" tipoDeAtributo= "XML" tipo= "rotar" desde= "0" a= "360" dur= "1s" repeatCount= "indefinido" /> </círculo></svg>

Animación SVG usando CSS

<?xml version="1.0" encoding="UTF-8" independiente="sí"?><svg version= "1.1" xmlns= "http://www.w3.org/2000/svg" xmlns:xlink= "http://www.w3.org/1999/xlink"    ancho= "100%" alto= "100%" viewBox= "-4 -4 8 8" >   <title>  Animación SVG  usando  CSS </title> <estilo> @fotogramasclave  rot_kf  { desde  {  transformar:  rotar(0deg);  } para  {  transformar:  rotar(360deg);  } } .rot  {  animación:  rot_kf  1s  lineal  infinito;  } </estilo> <circle class= "podredumbre"   cx= "0" cy= "1" r= "2" stroke= "azul" fill= "ninguno" />    </svg>

Animación SVG con ECMAScript

Un semáforo, animado mediante animación SVG y Javascript.
<?xml version="1.0" encoding="UTF-8" independiente="sí"?><svg version= "1.1" xmlns= "http://www.w3.org/2000/svg" xmlns:xlink= "http://www.w3.org/1999/xlink" width= "100%" height= "100%" viewBox= "-4 -4 8 8" onload= "rotar(evt)" >        <title>  Animación SVG  con  ECMAScript </title> <guión> función  rotar(evt)  {  objeto constante  =  evt.target.ownerDocument.getElementById('rot'); establecerIntervalo(()  =>  { const  ahora  =  nueva  Fecha(); const  milisegundos  =  ahora.getTime()  %  1000; const  degrees  =  milisegundos  *  0.36;  //  360  grados  en  1000  ms objeto.setAttribute('transformar',  `rotar(${grados})`); },  20); } </script> <circle id= "podredumbre"   cx= "0" cy= "1" r= "2" stroke= "verde" fill= "ninguno" />    </svg>

Aunque el ejemplo anterior funciona, no es la implementación óptima; la animación está limitada a 50 cuadros por segundo (FPS). El uso de requestAnimationFrameproporciona un mejor rendimiento y puede alcanzar los 60 FPS:

<?xml version="1.0" encoding="UTF-8" independiente="sí"?><svg version= "1.1" xmlns= "http://www.w3.org/2000/svg" xmlns:xlink= "http://www.w3.org/1999/xlink" ancho= "100%" alto= "100%" viewBox= "-4 -4 8 8" onload= "init()" >        <title>  Animación SVG  usando  requestAnimationFrame() </title> <guión> dejar  objeto;  función  init()  { objeto  =  documento.getElementById('rot');  ventana.requestAnimationFrame(rotar); }  función  rotar(marca de tiempo)  { const  milisegundos  =  marca de tiempo  %  1000; const  degrees  =  milisegundos  *  0.36;  //  360  grados  en  1000  ms objeto.setAttribute('transformar',  `rotar(${grados})`); ventana.requestAnimationFrame(rotar); } </script> <circle id= "rot" cx= "0" cy= "1" r= "2" stroke= "green" fill= "none" />      </svg>

Atributos SMIL para identificar el atributo de destino

Los siguientes son los atributos de animación que identifican el atributo de destino para el elemento de destino dado cuyo valor cambia con el tiempo. attributeName = "<attributeName>"especifica el nombre del atributo de destino. Se puede utilizar un prefijo XMLNS para indicar el espacio de nombres XML para el atributo. El prefijo se interpretará en el ámbito del elemento de animación actual.

attributeType = "CSS | XML | auto"especifica el espacio de nombres en el que se definen el atributo de destino y sus valores asociados. CSSespecifica que el valor de 'attributeName' es el nombre de una propiedad CSS definida como animable en esta especificación. XMLespecifica que el valor de 'attributeName' es el nombre de un atributo XML definido en el espacio de nombres XML predeterminado para el elemento de destino. El atributo debe definirse como animable en esta especificación. autoEl valor predeterminado es 'auto'. La implementación debe hacer coincidir el 'nombre del atributo' con un atributo para el elemento de destino. La implementación primero debe buscar en la lista de propiedades CSS un nombre de propiedad coincidente y, si no se encuentra ninguno, buscar el elemento en el espacio de nombres XML predeterminado.

El software wiki MediaWiki genera automáticamente miniaturas estáticas y no animadas de imágenes SVG. Al ver la imagen SVG real desde cada página de descripción respectiva, se mostrará su animación en un navegador compatible.

Bibliotecas

Existen varias bibliotecas de JavaScript para trabajar con animaciones SVG. Una ventaja de usar dichas bibliotecas es que a menudo resuelven problemas de incompatibilidad en los navegadores mediante la abstracción . Algunos ejemplos de bibliotecas son Raphaël y Velocity.js.

Véase también

Referencias

  1. ^ "Especificación de gráficos vectoriales escalables (SVG) 1.1". World Wide Web Consortium . Enero de 2003 – abril de 2009. Archivado desde el original el 27 de agosto de 2006. Consultado el 4 de febrero de 2010 .
  2. ^ Festa, Paul (9 de enero de 2003). «W3C releases scripting standard, caveat». CNet . Archivado desde el original el 17 de mayo de 2011. Consultado el 24 de febrero de 2010 .
  3. ^ Bulterman, DCA ; Lloyd Rutledge (noviembre de 2008). SMIL 3.0: Multimedia interactiva para la Web, dispositivos móviles y libros parlantes Daisy. X.media.publishing (2.ª ed.). Nueva York: Springer. pág. 508. ISBN 9783540785460Archivado desde el original el 24 de abril de 2022 . Consultado el 24 de abril de 2022 .
  4. ^ Dick Bulterman . SMIL 3.0. Archivado desde el original el 24 de abril de 2022 . Consultado el 24 de abril de 2022 .
  5. ^ "Soporte de animación SVG en Amaya". World Wide Web Consortium . 15 de abril de 2003. Archivado desde el original el 11 de septiembre de 2009. Consultado el 4 de febrero de 2010 .
  6. ^ McCathieNevile, Charles (31 de octubre de 2006). "Animating Your SVG". Comunidad de desarrolladores de Opera . Opera Software . Archivado desde el original el 7 de marzo de 2010. Consultado el 24 de febrero de 2010 .
  7. ^ "Animación SVG con SMIL". 29 de marzo de 2011. Archivado desde el original el 30 de abril de 2011. Consultado el 29 de marzo de 2011 .
  8. ^ "¿Cuándo puedo utilizar la animación SVG SMIL?". Archivado desde el original el 22 de marzo de 2011. Consultado el 29 de marzo de 2011 .
  9. ^ Dahlström, Erik (agosto de 2008). "Trucos de javascript, SVG y SMIL". Opera Software en el sitio web "SVG Open". Archivado desde el original el 6 de abril de 2009. Consultado el 24 de febrero de 2010 .
  10. ^ "Página de inicio de multimedia sincronizada del W3C". www.w3.org . Archivado desde el original el 17 de abril de 2022 . Consultado el 20 de marzo de 2022 .
  11. ^ Hoschka, Philipp, ed. (15 de junio de 1998). "Especificación del lenguaje de integración multimedia sincronizada (SMIL) 1.0". W3C . Grupo de trabajo SYMM. Archivado desde el original el 30 de marzo de 2021 . Consultado el 9 de abril de 2021 .
  12. ^ Khudairi, Sally; Jacobs, Ian; Mitchell, Ned; Lloyd, Andrew; Matsubara, Yumiko (15 de junio de 1998). "Comunicado de prensa: el W3C publica SMIL como recomendación del W3C". W3C . Archivado desde el original el 8 de febrero de 2020 . Consultado el 9 de abril de 2021 .
  13. ^ Schmitz, Patrick; Yu, Jin; Santangeli, Peter (1998-09-18). "Timed Interactive Multimedia Extensions for HTML (HTML+TIME); Extending SMIL into the Web Browser" (Extensiones multimedia interactivas temporizadas para HTML (HTML+TIME); extensión de SMIL al navegador web). Consorcio World Wide Web (w3.org) . Archivado desde el original el 2022-01-20 . Consultado el 2022-03-20 .
  14. ^ "Lenguaje de integración multimedia sincronizada (SMIL 2.0)". www.w3.org . 7 de agosto de 2001. Archivado desde el original el 26 de marzo de 2022 . Consultado el 20 de marzo de 2022 .
  15. ^ Schmitz, Patrick; Cohen, Aaron (4 de septiembre de 2001). "Animación SMIL". www.w3.org . Archivado desde el original el 14 de junio de 2022 . Consultado el 20 de marzo de 2022 .