0:00:00.930,0:00:03.213 Estamos de volta com contador do Oh noes. 0:00:03.643,0:00:09.106 Se quisermos fazer o Oh Noes ficar maior[br]conforme o contador se aproxima de zero. 0:00:09.461,0:00:11.771 Para deixar mais dramático. 0:00:12.690,0:00:16.850 Uma maneira de fazer isso é [br]animar o CSS dessa imagem. 0:00:17.319,0:00:19.139 com a propriedade window.setInterval 0:00:20.271,0:00:24.541 O primeiro passo é pegar a [br]imagem e armazenar em uma variável. 0:00:24.801,0:00:30.391 var ohnoes =[br] document.getelementById("ohnoes"); 0:00:31.981,0:00:36.341 Vou configurar o tamanho inicial [br]ohnoes.style.width = "50px"; 0:00:36.458,0:00:39.418 Assim temos um tamanho inicial para [br]começar aumentar a imagem. 0:00:39.508,0:00:43.885 E agora vou criar a função makeItBigger. 0:00:44.483,0:00:47.643 Que será responsável por [br]aumentar a imagem. 0:00:48.194,0:00:52.784 Dentro da função precisamos mudar [br]a propriedade width (largura) da imagem. 0:00:52.949,0:00:58.011 Adicionando um ao [br]tamanho anterior da imagem. 0:01:00.071,0:01:04.191 Por fim vou executar a função [br]window.SetInterval 0:01:04.191,0:01:06.911 window.setInterval(makeItBigger) 0:01:06.911,0:01:11.470 Com que frequência você quer aumentar? 0:01:11.470,0:01:13.780 Queremos uma animação suave 0:01:13.789,0:01:16.750 O que significa que queremos algo [br]entre 24 quadros por segundo 0:01:16.750,0:01:18.220 e 60 quadros por segundo. 0:01:19.010,0:01:21.180 Vou experimentar 30 quadros por segundo. 0:01:21.296,0:01:24.166 Que é 1000 dividido por 30. 0:01:24.925,0:01:27.955 Bem, não está funcionando. 0:01:28.588,0:01:30.728 Você sabe o porque? [br]É um pouco complicado. 0:01:30.848,0:01:33.809 Vamos dar uma olhada nesse[br]trecho de código. 0:01:34.195,0:01:39.105 Qual é o valor de ohnoes.style.width? 0:01:39.108,0:01:40.998 Após essa linha ser executada? 0:01:41.485,0:01:45.757 Você pode achar que foi [br]de 50 para 51 pixels, 0:01:45.757,0:01:50.156 mas vamos imprimir o resultado [br]pra ver qual é o valor. 0:01:50.156,0:01:52.445 Vou incluir o log na div com [br]o seguinte comando 0:01:52.445,0:01:56.245 infoDiv.textContent = ohnoes.style.width; 0:01:58.543,0:02:04.813 E então vamos adicionar 1 a 50 pixels. 0:02:05.429,0:02:07.700 Quanto é 50 pixels + 1? 0:02:07.700,0:02:09.828 Você deve pensar que é 51 pixels, 0:02:09.828,0:02:14.848 mas JavaScript interpreta os [br]50 pixels como uma string. 0:02:15.787,0:02:20.037 Então na verdade acaba virando "50px1". 0:02:20.058,0:02:21.978 O que não faz sentido nenhum. 0:02:22.551,0:02:25.790 Logo o navegador está [br]simplesmente ignorando nossa tentativa 0:02:25.790,0:02:29.040 de mudar o valor da propriedade width [br]para algo sem o menor sentido. 0:02:29.702,0:02:35.492 Então precisamos converter essa [br]unidade em um número, 0:02:35.648,0:02:39.968 e então adicionar 1 e só depois [br]adicionar o "px" novamente. 0:02:40.678,0:02:45.360 Podemos fazer a conversão para [br]número com a função ParseFlow 0:02:45.360,0:02:53.100 coloca-lá entre chaves e concatenar [br]o "px" no final. 0:02:53.237,0:02:55.977 E está funcionando, está ficando maior. 0:02:56.232,0:02:57.629 Certo. 0:02:58.229,0:03:01.321 Você viu a dificuldade de animar[br]propriedades do CSS. 0:03:01.321,0:03:03.792 Geralmente as propriedades [br]tem as unidades anexadas, 0:03:03.792,0:03:05.892 então você vai ter que converter[br]para número 0:03:05.932,0:03:07.385 Meu Deus está ficando maior ! 0:03:07.385,0:03:08.915 converter para um tipo numérico. 0:03:08.915,0:03:11.265 e concatenar o identificador [br]da unidade novamente 0:03:11.265,0:03:14.426 Ok, está ficando bem assustador ! 0:03:14.477,0:03:18.947 Na verdade há nada de complicado [br]no uso do SetInterval 0:03:18.947,0:03:20.925 para animar propriedades. 0:03:21.337,0:03:27.447 Primeiro, o navegador não [br]garante que o intervalo será obedecido. 0:03:28.647,0:03:31.807 Outras coisas podem surgir como [br]interação com o usuário. 0:03:31.814,0:03:33.164 Como o usuário digitar algo. 0:03:33.164,0:03:36.168 E isso pode fazer com que sua [br]função seja executada mais tarde. 0:03:36.168,0:03:38.297 Assim você não terá essa animação suave. 0:03:38.999,0:03:43.125 Segundo, o navegador irá executar essa[br]função mesmo que a tabela esteja escondida 0:03:43.475,0:03:47.035 fazendo uso de processamento[br]desnecessariamente. 0:03:48.184,0:03:51.764 Por isso eu uso uma nova função disponível[br]em navegadores modernos 0:03:51.804,0:03:55.084 desenvolvidos espacialmente com [br]animações DOM em mente. 0:03:55.550,0:03:58.570 É chamada de [br]windows.RequestAnimationFrame (RFA) 0:03:58.860,0:04:02.782 Para usa-lá vamos nos livrar [br]dessa linha com SetInterval 0:04:03.452,0:04:08.102 e vamos executar a RFA 0:04:08.762,0:04:11.460 de dentro da função [br] 0:04:11.750,0:04:17.420 e referenciar a função makeItBigger. 0:04:18.570,0:04:24.190 E então vamos chamar makeItBigger[br]na função PageLoad 0:04:27.230,0:04:30.480 Nossa, está ficando mair [br]e mais rápido dessa vez. 0:04:30.890,0:04:35.631 Agora o navegador chama a função[br]MakeItBigger logo após imprimir a imagem 0:04:35.631,0:04:37.744 Que é cerca de 60 quadros por segundo, 0:04:37.744,0:04:39.454 o dobro do que tínhamos antes. 0:04:40.021,0:04:43.021 e adicionamos 1 pixel a largura cada vez 0:04:43.114,0:04:47.354 e refaz o cálculo em 60 [br]quadros por segundo 0:04:47.863,0:04:50.723 Em apenas alguns segundos [br]ficar maior que a página. 0:04:51.053,0:04:52.713 Agora ele se foi. 0:04:53.131,0:04:55.301 Como desaceleremos nossa animação? 0:04:56.103,0:05:01.092 Há algumas maneiras, mas um modo que eu [br]gosto é rastrear quanto tempo já passou. 0:05:01.092,0:05:04.332 E então calcular qual deveria ser [br]o novo tamanho baseado nisso. 0:05:04.561,0:05:09.091 Começamos guardando o hora que [br]a animação inicia milisegundos , 0:05:09.123,0:05:10.833 antes da função ser executada. 0:05:11.187,0:05:16.657 var startTime = new Date().getTime(); 0:05:17.151,0:05:20.481 E dentro da função MakeItBigger [br]armazenamos o hora atual. 0:05:20.854,0:05:25.784 var currTime = new Date().getTime(); 0:05:26.716,0:05:31.636 E no cálculo faremos com que [br]cresça 30 pixels por segundo. 0:05:31.636,0:05:33.982 E o tamanho inicial da imagem 50 px. 0:05:34.050,0:05:37.270 Então vamos calcular isso aqui. 0:05:37.476,0:05:43.486 Então o valor inicial da variável [br]newWidth será 50 0:05:44.355,0:05:52.477 mais currTime menos startTime em [br]milissegundos, dividido por 1000 0:05:53.207,0:06:00.166 isso tudo vezes 30, porque vamos [br]aumentar 30 pixels por segundo 0:06:00.166,0:06:02.206 Ok, esse é nossa nova largura. 0:06:02.501,0:06:09.631 Agora vamos associar o style.width[br]a essa nova largura. 0:06:12.234,0:06:18.774 Aí está, a animação suave em [br]30 quadros por segundo. 0:06:19.506,0:06:24.666 E podemos mudar esse número se quisermos [br]que cresça mais devagar 0:06:25.204,0:06:27.694 ou mais rápido. 0:06:30.520,0:06:34.120 Que tal suavizar a animação quando [br]ela ficar muito grande? 0:06:34.150,0:06:37.700 Podemos simplesmente [br]colocar um if nessa linha 0:06:37.985,0:06:42.548 e para que seja executado somente [br]se a variável currentWidth 0:06:42.548,0:06:48.442 for menor que um número, como 300 0:06:48.442,0:06:49.612 vamos tentar isso. 0:06:54.331,0:06:56.251 Na verdade currentWidth é 0:06:56.470,0:06:58.560 Não, newWidth desculpe. 0:06:58.746,0:07:01.516 Vamos ver se chega a 300. 0:07:03.681,0:07:07.201 Vai Oh noes, você consegue, você consegue. 0:07:07.494,0:07:08.464 Perfeito! 0:07:09.078,0:07:12.348 Essa técnica de usar a propriedade RFA 0:07:12.685,0:07:17.515 deve funcionar para usuários [br]do Chrome, Firefox ou IE 10 ou superior 0:07:18.278,0:07:21.538 Há várias bibliotecas JavaScript e shims 0:07:21.759,0:07:25.259 que irão usar RAF[br]quando estiver disponível 0:07:25.472,0:07:29.312 e usar setInterval em navegadores antigos. 0:07:30.101,0:07:32.521 Essa é a questão do desenvolvimento web. 0:07:32.579,0:07:34.729 A rede está está mudando o tempo todo, 0:07:34.866,0:07:37.216 navegadores estão incluindo [br]novas características 0:07:37.216,0:07:40.946 desenvolvedores estão descobrindo novas [br]maneira de usar essas características. 0:07:40.946,0:07:43.861 Você tem que estar aprendendo[br]constantemente o que há de novo, 0:07:43.861,0:07:46.244 e o que é melhor para[br]o que você quer fazer. 0:07:46.262,0:07:48.132 Legendado por [Valter Bigeli][br]Revisado por [Fernando dos Reis]