Girar con animateTransform

facebook-svg gplus-svg twitter-svg

Para facilitar las cosas es aconsejable poner los objetos que deseamos girar en el origen del lienzo SVG ( x="0" y="0" ), y después trasladar el objeto allá donde nos apetezca.

Una cinta de magnetófono

A continuación queremos dibujar una cinta de magnetófono, de las de antes. Para esto dibujamos un circulo sin relleno: fill:none con un borde muy grueso: stroke-width:40. Utilizamos el atributo stroke-dasharray:42, 42; para que el borde sea una línea discontinua.

Lea más acerca del atributo stroke-dasharray

Sugerencia del chef: para un sabor distinto pruebe también: stroke-dasharray:9, 9; stroke-dasharray:14, 14; o stroke-dasharray:18, 18

Para darle al círculo un movimiento giratorio utilizamos el elemento <animateTransform>. Queremos animar el atributo transform ( attributeName="transform" ), un atributo de tipo XML ( attributeType="xml" ). También tenemos que especificar el tipo de transformación: type="rotate". Se trata de un movimiento giratorio de 360° o sea from="0" to="360". Otra posibilidad es utilizar el atributo by="360" en lugar de los atributos from y to. Una vuelta completa dura 5 segundos ( dur="5s" ) y la animación se repite de forma indefinida ( repeatCount = "indefinite" ).
También dibujamos un pequeño círculo rojo para marcar el centro de la "cinta magnética", y otro círculo ( radio r="70" ) para marcar el borde exterior.
Ninguno de estos círculos no tiene declarados los atributos cx y cy. Si esto pasa el SVG considera que cx="0" y cy="0", y dibuja los círculos con el centro en el origen del lienzo SVG. Esto nos viene de maravilla porque, ya lo sabemos, el movimiento giratorio pasa alrededor de este punto. Lo que tenemos que hacer es envolver todos estos círculos en un elemento <g> y trasladar el grupo en el centro del lienzo.

<g transform= "translate(125, 100)" >



   
    
    
      
    
    
  

Cronómetro SVG

Podemos fácilmente construir un cronómetro SVG utilizando <animateTransform>.
Después de dibujar el disco del reloj ( <circle r= "70" . . . ) y los marcadores de tiempo, dibujamos las manillas del reloj.
Una línea de 50px de larga y una anchura stroke-width = 3 marca las horas. Esta línea hace un giro completo ( by="360" ) en 12 horas ( dur ="12h" ).
Otra línea larga de 55px y con una anchura stroke-width = 2 marca los minutos. Esta línea hace un giro completo ( by="360" ) en 1 hora ( dur ="60min" ).
Finalmente la línea que marca los segundos ( 60px de larga, stroke-width = 1 ) hace un giro completo ( by="360" ) en 1 minuto ( dur ="60s" ).

Como en el ejemplo anterior, dibujamos todos los componentes del cronómetro en el origen del lienzo SVG ( x="0" y="0" ), los envolvemos en un elemento <g> y los trasladamos en el centro del lienzo.

<g transform= "translate(125,100)">



  
    Reloj
    
    
      Marcadores de tiempo
      
      
      
      
      
      
      
      
      
      
      
      
    
    
      Las manillas del reloj
      
        
      
      
        
      
      
        
      
    
  
Reloj Marcadores de tiempo Las manillas del reloj