SVG tem sido uma das tecnologias mais subutilizadas quando se trata de desenvolvimento web. Apesar da sua utilidade e possibilidades infinitas, ainda é um mistério para muitos e quando se trata de integrá-lo utilizando animações, muitos desenvolvedores não sabem ainda por onde começar. Com grandes bibliotecas como Snap.svg a utilização de recursos SVG torna-se mais fácil e hoje, nós gostaríamos de explorar como animar ícones SVG.
Você certamente tem visto muitos exemplos de ícones animados usando transições e animações CSS, como os Transformicons Navicon por Bennett Feely que explicaremos em breve. Queremos tentar fazer algo semelhante usando ícones SVG com a ajuda de Snap.svg.
Note que estamos trabalhando com uma biblioteca JavaScript
moderna para manipular nossos SVGs. Navegadores antigos e sem suporte não
serão capazes executar todas as funcionalidades.
A primeira coisa que fazemos é criar alguns ícones SVG usando um editor SVG como o Inkscape. Nós usamos um tamanho de 64×64 pixels para os ícones.
Para cada ícone iremos executar uma animação exclusiva. Vamos definir o que vai acontecer para cada ícone em nosso script.
Nós vamos adicionar os ícones dinamicamente a nossa página usando Snap.svg e se não houver suporte à tecnologia SVG vamos simplesmente mostrar uma imagem de fundo para os elementos span que usamos para empacotar cada gráfico:
<section class="si-icons"> <span class="si-icon si-icon-play" data-icon-name="play"></span> <span class="si-icon si-icon-monitor" data-icon-name="monitor"></span> <!-- ... --></section>Com a ajuda de Modernizr podemos definir o fallback em nosso CSS:
.no-svg .si-icon-play { background-image: url('../png/play.png') }.no-svg .si-icon-monitor { background-image: url('../png/monitor.png') }
Os ícones PNG foram gerados com a fabulosa ferramenta iconizr. Você poderia também usar sprites CSS e definir uma classe ativa, mas decidimos apenas fazer um retorno muito simples para esta demonstração.
Agora vamos dar uma olhada no que estamos fazendo no JavaScript. A
idéia é fazer algo com cada ícone. Pode ser algum tipo de
transformação, como uma rotação ou uma escala, ou numa mudança de um
caminho completamente. Com a Snap.svg podemos carregar dinamicamente
nossos SVGs, armazenados em uma determinada pasta, e manipulá-los de uma maneira
muito prática graças à essa API poderosa.
A variável de configuração para os ícones ", svgIconConfig" tem todas as configurações de animação para cada ícone.
Vamos dar uma olhada em sua lógica:
Vamos dar uma olhada em sua lógica:
[icon name - same name given to the data-icon-name] : { url : [url of the svg file], animation : [array of animation configs for each element]} Cada animação de configuração pode ter a seguinte estrutura:
{ el : [element selector], animProperties : [animation config for the initial/from and final/to state]}
Vamos dar uma olhada em alguns valores possíveis para o estado inicial e final:
from : { val : [animation name value pairs], after : [attribute name value pairs to be applied when the animation ends], before : [attribute name value pairs to be applied before the animation starts], delayFactor : [animation delay factor], animAfter : [animation name value pairs to be applied when the animation ends] }Um exemplo real seria o seguinte:
myIconName : { url : 'svgs/myIconName.svg', animation : [ { el : 'path:nth-child(5)', animProperties : { from : { val : '{"path" : "m 61.693118,24.434001 -59.386236,0 29.692524,19.897984 z"}', animAfter : '{"stroke" : "#000"}' }, to : { val : '{"path" : "m 61.693118,24.434001 -59.386236,0 29.692524,-19.7269617 z"}', animAfter : '{"stroke" : "#444"}' } } }, { el : 'rect:nth-child(3)', animProperties : { from : { val : '{"transform" : "t0 0"}', after : '{ "opacity" : 0 }' }, to : { val : '{"transform" : "t-10 -10"}', before : '{ "opacity" : 1 }' } } }]}Confira a demo para vislumbrar alguns exemplos de diferentes apresentações e a fácil ativação.
Esperamos que você aproveite esta experiência e que lhe seja útil!


Nenhum comentário:
Postar um comentário