0:00:00.989,0:00:04.015
Eu tenho essa página web[br]com uma foto de "Oh Noes"
0:00:04.015,0:00:07.862
que está enlouquecendo porque[br]o mundo vai acabar em breve -
0:00:07.862,0:00:10.473
especificamente, em 500 segundos.
0:00:10.473,0:00:15.476
Eu quero fazer essa página web muito[br]mais útil transformando esse número
0:00:15.476,0:00:16.934
em uma contagem regressiva
0:00:16.934,0:00:20.781
para que os visitantes possam ver[br]exatamente quanto tempo eles têm sobrando.
0:00:21.261,0:00:23.934
Quando animamos parte de uma página web,
0:00:23.934,0:00:26.708
a estratégia é achar algum elemento nela
0:00:26.708,0:00:29.303
e então mudar algo nesse elemento,
0:00:29.303,0:00:32.779
e fazer isso um certo número[br]de vezes por segundo.
0:00:32.779,0:00:37.693
Então, para o primeiro passo,[br]vou achar a contagem regressiva pelo ID.
0:00:37.693,0:00:39.490
Simples.
0:00:39.490,0:00:47.567
(digitando)
0:00:47.567,0:00:51.742
Para o segundo passo, vou fazer uma função[br]que executa uma contagem regressiva.
0:00:51.742,0:00:54.788
(digitando)
0:00:55.078,0:00:57.116
E o que vamos fazer...
0:00:57.116,0:00:59.447
Eu quero definir o 'textContent',
0:00:59.447,0:01:03.925
e eu quero que ele seja igual[br]ao número anterior menos um.
0:01:03.925,0:01:06.758
E o 'textContent' vai ser[br]uma cadeia de caracteres.
0:01:06.758,0:01:10.027
Então temos que tranformá-lo em um número.
0:01:10.027,0:01:12.853
Você pode fazer isso usando 'parsefloat()'
0:01:12.853,0:01:15.753
e então podemos subtrair um dele.
0:01:15.753,0:01:21.541
Então, finalmente, queremos chamar[br]essa função em um intervalo,
0:01:21.541,0:01:25.418
o que significa um certo[br]número de vezes por segundo.
0:01:25.418,0:01:30.415
E podemos fazer isso usando[br]'window.setInterval()'.
0:01:30.415,0:01:33.691
E essa função recebe dois argumentos:
0:01:33.691,0:01:38.096
a função de retorno de chamada e[br]o número de milissegundos para esperar
0:01:38.096,0:01:40.785
antes dessa função[br]ser chamada de novo.
0:01:40.785,0:01:43.369
Nós podemos especificar [br]a função de retorno de chamada
0:01:43.369,0:01:46.809
do mesmo jeito que especificamos[br]para ouvintes de evento: pelo nome.
0:01:46.809,0:01:49.350
E então, está indo[br]muito rápido agora
0:01:49.350,0:01:51.737
porque não especificamos[br]o segundo argumento.
0:01:51.737,0:01:55.250
Quanto a isso, queremos que ele seja[br]um certo número de milissegundos,
0:01:55.250,0:01:58.520
e queremos uma vez por segundo,[br]então vamos colocar um mil
0:01:58.520,0:02:01.408
porque existem um mil[br]milissegundos em um segundo.
0:02:01.408,0:02:05.218
Pronto, agora está [br]diminuindo um por segundo.
0:02:05.218,0:02:10.245
Então é melhor você aprender o máximo que [br]você puder nos próximos 490 segundos!
0:02:10.245,0:02:15.036
Há mais uma função de window que[br]usamos às vezes no lugar de 'setInterval',
0:02:15.036,0:02:16.747
e ela é 'setTimeout'.
0:02:16.747,0:02:21.782
E eu vou mudar para ela, e ver[br]se você consegue notar a diferença.
0:02:21.782,0:02:23.734
Tem que esperar um pouco.
0:02:23.734,0:02:28.297
Pronto, agora talvez você consiga ver[br]que quando usamos 'setTimeout',
0:02:28.297,0:02:34.141
o navegador apenas chama[br]a função uma vez, não repetidamente.
0:02:34.141,0:02:38.965
Isso não é tão útil para quando[br]estamos fazendo animações.
0:02:38.965,0:02:41.732
Mas pode ser super útil em outros casos,
0:02:41.732,0:02:45.756
como se mostrarmos um aviso[br]para nossos usuários e quiséssemos
0:02:45.756,0:02:48.090
escondê-lo após dez segundos.
0:02:48.090,0:02:53.254
Então deixe-me mudar isso[br]de volta para 'setInterval'
0:02:53.254,0:02:56.507
Agora, quando estamos[br]testando animações desse jeito,
0:02:56.507,0:03:00.450
deveríamos realmente ver como elas ficam[br]em todos os pontos da animação,
0:03:00.450,0:03:02.840
como o que acontece[br]quando chega a zero.
0:03:02.840,0:03:05.018
Bem, vai demorar um[br]bom tempo para chegar lá,
0:03:05.018,0:03:06.496
e você vai ficar[br]muito entediado
0:03:06.496,0:03:10.691
então vamos apenas mudar[br]nosso dado inicial para cinco,
0:03:10.691,0:03:12.408
e ver o que acontece.
0:03:12.408,0:03:16.852
Quatro, três, dois, um, zero...
0:03:16.852,0:03:19.289
Menos um, menos dois.
0:03:19.289,0:03:21.878
Agora isso está ficando estranho.
0:03:21.878,0:03:26.292
Quando o mundo acaba, ele deveria[br]apenas fazer "Kabum!" e parar de contar.
0:03:26.292,0:03:30.111
Então o que nós queremos fazer[br]na verdade é parar essa animação
0:03:30.111,0:03:32.734
uma vez que ela chegue ao zero.
0:03:32.734,0:03:36.319
E podemos fazer isso usando[br]uma condição if dentro da função.
0:03:36.319,0:03:42.287
Então, deixe-me começar guardando[br]o tempo atual em uma variável
0:03:42.287,0:03:44.517
já que vamos usá-lo[br]algumas vezes.
0:03:44.517,0:03:51.383
Então eu vou apenas pegar isso, colocar[br]aqui e substituir isso com 'currentTime'
0:03:51.383,0:03:56.374
Agora, o que eu posso fazer é[br]ter uma condição if para ter certeza
0:03:56.374,0:04:00.977
que apenas vamos atualizar o texto[br]se 'currentTime' for maior que zero.
0:04:01.387,0:04:04.938
Esse é o único momento em que[br]realmente queremos subtrair um.
0:04:04.938,0:04:08.887
Então eu vou precisar[br]colocar isso aqui dentro.
0:04:11.437,0:04:15.012
Isso funciona, mas tem algo[br]muito ruim nessa abordagem.
0:04:15.012,0:04:19.654
O navegador ainda está chamando[br]a função 'countItDown' uma vez por segundo
0:04:19.654,0:04:21.649
enquanto a página web está aberta.
0:04:22.069,0:04:25.032
Você não deveria fazer navegadores[br]chamarem funções sem motivo,
0:04:25.102,0:04:27.591
eles tem muitas outras coisas[br]importantes para fazer.
0:04:28.281,0:04:30.935
O que queremos mesmo fazer[br]é dizer ao navegador que
0:04:30.935,0:04:35.585
uma vez que chegue a zero, ele [br]não precisa mais chamar essa função.
0:04:35.825,0:04:40.384
Podemos fazer isso usando um novo [br]método: 'window.clearInterval()'.
0:04:40.384,0:04:47.354
Podemos colocá-lo nesse else aqui -[br]'window.clearInterval()'.
0:04:47.354,0:04:52.189
Agora, precisamos passar um argumento[br]para que ele saiba qual intervalo remover.
0:04:52.189,0:04:55.799
Porque podemos ter vários[br]intervalos em uma página.
0:04:55.799,0:04:58.812
O jeito de sabermos[br]qual intervalo remover
0:04:58.812,0:05:02.983
é guardar o resultado de[br]'setInterval' em uma variável.
0:05:02.983,0:05:07.816
Então, agora que eu tenho ele em uma[br]variável 'timer', posso copiar e colar ali
0:05:07.816,0:05:11.122
e agora ela sabe o que remover,[br]então quando chegar a zero
0:05:11.122,0:05:15.571
deve parar de atualizar e[br]deve parar de chamar a função.
0:05:15.571,0:05:19.332
Para cada animação que você faz,[br]você deveria pensar cuidadosamente sobre
0:05:19.332,0:05:21.695
qual deveria ser a[br]condição de parada.
0:05:21.695,0:05:26.132
E sim, você pode ter algumas animações[br]que devem repetir e repetir, meus amigos -
0:05:26.132,0:05:29.023
mas é melhor que elas[br]sejam animações muito boas.
0:05:29.023,0:05:31.542
Porque seu navegador [br]está trabalhando toda vez
0:05:31.542,0:05:33.631
que chama essa função[br]de retorno de chamada.
0:05:33.631,0:05:37.341
Agora faça sua versão e faça[br]o mundo realmente fazer "Kabum!".
0:05:37.341,0:05:38.931
[Legendado por: Alberto Oliveira]