Animações de sprites mediante CSS3 e JavaScript

Vamos aproveitá-las no momento para um âmbito nem sempre suficientemente explícito em nossas codificações, a otimização do código, e mais concretamente, mediante sprites animados.

Veremos como em essência não precisaremos nada de JavaScript para isso; embora o usaremos como algo necessário para labores de controle das animações; portanto minimizando ao máximo sua utilização.

Ainda caberia um passo mais na otimização do código, algo que tratamos anteriormente: a inclusão do sprite em forma de imagem embebida, mas isso é algo que deixamos para posterior experimentação.

No presente artigo falaremos de:

  • O tratamento de sprites mediante CSS3
  • A animação de sprites mediante CSS3 puro
  • O suporte dado para isso pelos diferentes navegadores de Internet
  • O modo de controlar as animações com código JavaScript complementar

 

Animação de um sprite mediante CSS3

A especificação das animações CSS3 no modo rascunho em seu estado atual, em sua última forma, se pode consultar no seguinte endereço de Internet do World Wide Web Consortium (W3C): w3.org/TR/css3-animations

Essencialmente deveremos tratar com uma regra e uma propriedade, que descrevemos a seguir:

A regra @keyframes é o núcleo da definição da animação em CSS3. Dentro dela se especificará o estilo que se aplicará à evolução da animação. Esta regra se associa a uma propriedade correspondente, do contrario não terá efeito algum. Essa propriedade é a denominada “animation”. (w3schools.com/css3/css3_animations.asp)

  • Para nosso caso, se utilizarão as cotas from … to, que marcarão os estados inicial e final da animação. Isso representa o valor inicial (0%) e o final (100%), interpolando-se automaticamente os valores intermediários marcados no valor da função de iteração descrita na propriedade de animação associada –veja a seguir-
  • Também seria possível utilizar valores percentuais de evolução, marcando estágios de evolução a 10, 20, … 90%, por exemplo
  • Embora não seja obrigatório, é recomendável, neste caso, também marcar os estados de 0 e 100%

A propriedade animation, por sua parte, define as propriedades que terá a animação em si. Nela se passam uma serie de parâmetros –valores. (w3schools.com/cssref/css3_pr_animation.asp).

Sua sintaxe é, na forma mais completa:
animation: name duration timing-function delay iteration-count direction;

 

Valor
name Nome do keyframe que contém –define- a animação
duration Especifica o tempo que tardará a animação em ser reproduzida
timing-function Normalmente indicará as etapas da animação
delay Tempo de demora antes que comece a animação
iteration-count Recontagem do número de vezes que se repetirá
direction Indica, caso se repita, se se realizará em reversão ou em ciclos com reinicio

Os valores podem ser definidos separadamente, por exemplo:
animation-duration: 0.8

  • O valor animation-timing-function que utilizaremos é a função steps, que marca o número de etapas da animação, que por sua vez coincidirá com o número de fotogramas do sprite
  • O valor animation-iteration-count pode tomar qualquer valor inteiro ou infinite, que implica um looping infinito
  • O valor animation-direction pode valer normal –valor por padrão- ou alternate, neste último caso se levará a cabo em ciclos alternos no modo inverso.

Suporte nos diversos navegadores

A animação de sprites mediante CSS3, tal qual as expomos no presente artigo, mediante código CSS3 com @keyframes e animation:

  • É suportado, tal qual se define pelo W3C, no Internet Explorer 10, Opera e Firefox (Mozilla) em suas versões mais recentes
  • Os navegadores restantes precisam, pelo menos no momento presente, de suporte particular para sua execução. Sendo assim, todos dispõem de tais suportes –webkit, …-. Naturalmente, isso é algo que pode mudar em qualquer nova versão dos respectivos navegadores

Exemplo de animação de sprites mediante CSS3

No exemplo que segue ilustramos a animação do sprite mostrado na imagem do início do artigo; o código se mostra no Listado 1 e essencialmente consta de:

  • A propriedade animation toma como primeiro parâmetro o nome da propriedade que define a animação, veja mais adiante
  • Seu segundo parâmetro fixa o tempo em segundos em que se realizará o ciclo de uma animação completa, 0.8s
  • O terceiro parâmetro fixa a função que realizará o ciclo de animação, se trata de steps, que toma por sua vez de parâmetros o número de etapas, 8, e se indica que isso marca o final do ciclo
  • O quarto e, no nosso caso, último parâmetro, indica que o ciclo se repetirá indefinidamente, se da o valor infitite
  • Com respeito à regra @keyframes, se da em seu formato from … to
  • Isso supõe fixar seu ponto de inicio e seu ponto de finalização, que serão interpolados com base na função definida na propriedade animation
  • Dado que se trata de um sprite em linha, só se da o valor da cota de “background-position”. Note que a cota se passa com valor negativo, sendo os dados do inicio e do final do sprite
  • Damos o código com o suporte para os casos particulares dos diversos navegadores, embora em suas versões mais recentes não os precisassem, como comentamos no apartado anterior –Suporte nos diversos navegadores-

Note que se faz para todos os casos a modo de ilustração, dado que alguns, como as versões anteriores a Internet Explorer 10, para dar um exemplo, não dão suporte a este tipo de animação CSS3, enquanto que a 10 não precisa de nenhum código particular.

Listado 1: Exemplo de animação de sprites com CSS3

<!DOCTYPE html>

<html lang=”en”>
<head>
<meta charset=”utf-8″ />
<title></title>

<style>
@keyframes carteiro {
from {
background-position: 0px;
}

to {
background-position: -560px;
}
}

@-ms-keyframes carteiro {
from {
background-position: 0px;
}

to {
background-position: -560px;
}
}

@-o-keyframes carteiro {
from {
background-position: 0px;
}

to {
background-position: -560px;
}
}

@-webkit-keyframes carteiro {
from {
background-position: 0px;
}

to {
background-position: -560px;
}
}

@-moz-keyframes carteiro {
from {
background-position: 0px;
}

to {
background-position: -560px;
}
}

.recorte {
width: 70px;
height: 112px;
background-image: url(“carteiro.png”);
-ms-animation: carteiro .8s steps(8, end) infinite;
-webkit-animation: carteiro .8s steps(8, end) infinite;
-moz-animation: carteiro .8s steps(8, end) infinite;
-o-animation: carteiro .8s steps(8, end) infinite;
animation: carteiro .8s steps(8, end) infinite;
}
</style>
</head>
<body>

<div></div>
</body>
</html>

Controle da animação mediante JavaScript

No Listado 2 incluímos código JavaScript complementar, não para a animação em si, mas para o controle da animação. Isto é, para a paralização e continuação da animação.

O acrescentado é muito simples, se trata de programar botões de comando que façam uso da função “stopAnimation” e “startAnimation”, que modifiquem o estado do estilo de animação “animationPlayState”: O código JavaScript se reúne na breve listagem imediatamente abaixo e só cabe ressaltar:

  • O valor de animationPlayState se permuta de paused para running, para, respectivamente, pausar e restabelecer a execução da animação
  • Sobre que se aplica o estilo se programa com uma simples chamada DOM ao elemento DIV que contém a animação
  • A codificação dos botões de comando pode ser observado no Listado 3, ao final, na forma de dois componentes button que chamam as funções JavaScript quando são pressionados

<script>

function startAnimation() {
document.getElementById(“recorte”).style.animationPlayState = “running”;
}

function stopAnimation() {
document.getElementById(“recorte”).style.animationPlayState = “paused”;
}

</script>

Entretanto, o Listado 2 nos mostra nosso exemplo final, pronto para ser utilizado com os diferentes navegadores, com as mesmas considerações que realizamos em relação ao exemplo inicial.

Listado 2: Exemplo de animação de sprites com CSS3 e controles de execução programados em JavaScript

<!DOCTYPE html>

<html lang=”en”>
<head>
<meta charset=”utf-8″ />
<title></title>

<style>
@keyframes carteiro {
from {
background-position: 0px;
}

to {
background-position: -560px;
}
}

@-ms-keyframes carteiro {
from {
background-position: 0px;
}

to {
background-position: -560px;
}
}

@-o-keyframes carteiro {
from {
background-position: 0px;
}

to {
background-position: -560px;
}
}

@-webkit-keyframes carteiro {
from {
background-position: 0px;
}

to {
background-position: -560px;
}
}

@-moz-keyframes carteiro {
from {
background-position: 0px;
}

to {
background-position: -560px;
}
}

.recorte {
width: 70px;
height: 112px;
background-image: url(“carteiro.png”);
-ms-animation: carteiro .8s steps(8, end) infinite;
-webkit-animation: carteiro .8s steps(8, end) infinite;
-moz-animation: carteiro .8s steps(8, end) infinite;
-o-animation: carteiro .8s steps(8, end) infinite;
animation: carteiro .8s steps(8, end) infinite;
}
</style>

<script>

function startAnimation() {
document.getElementById(“recorte”).style.MsAnimationPlayState = “running”;
document.getElementById(“recorte”).style.webkitAnimationPlayState = “running”;
document.getElementById(“recorte”).style.MozAnimationPlayState = “running”;
document.getElementById(“recorte”).style.OAnimationPlayState = “running”;
document.getElementById(“recorte”).style.animationPlayState = “running”;
}

function stopAnimation() {
document.getElementById(“recorte”).style.MsAnimationPlayState = “paused”;
document.getElementById(“recorte”).style.webkitAnimationPlayState = “paused”;
document.getElementById(“recorte”).style.MozAnimationPlayState = “paused”;
document.getElementById(“recorte”).style.OAnimationPlayState = “paused”;
document.getElementById(“recorte”).style.animationPlayState = “paused”;
}

</script>

</head>
<body>
<div id=”recorte”></div>
<button id=”Pausar” name=”Pausar” onclick=”stopAnimation()”>Pausar</button>
<button id=”Animar” name=”Animar” onclick=”startAnimation()”>Animar</button>
</body>
</html>

Conclusões

Ao longo do presente artigo vimos como programar uma animação de sprites mediante CSS3 e como controlá-la mediante algum código JavaScript.

Comprovamos a simplicidade do código subjacente e uma forma mais de acrescentar animações a nossas páginas web e ademais de forma otimizada. Tal como descrevemos ao começo, só nos faltaria um ponto importante final, que deixamos como um exercício: inserir embebida a imagem no arquivo HTML, mediante “Base64”, por exemplo, tal como fizemos no artigo cuja referencia damos no início.

Fonte: http://www.criarweb.com/artigos/sprites-css3-javascript.html

Deixe um comentário