< Return to Video

Animando DOM com setInterval (Versão vídeo)

  • 0:01 - 0:04
    Eu tenho essa página web
    com uma foto de "Oh Noes"
  • 0:04 - 0:08
    que está enlouquecendo porque
    o mundo vai acabar em breve -
  • 0:08 - 0:10
    especificamente, em 500 segundos.
  • 0:10 - 0:15
    Eu quero fazer essa página web muito
    mais útil transformando esse número
  • 0:15 - 0:17
    em uma contagem regressiva
  • 0:17 - 0:21
    para que os visitantes possam ver
    exatamente quanto tempo eles têm sobrando.
  • 0:21 - 0:24
    Quando animamos parte de uma página web,
  • 0:24 - 0:27
    a estratégia é achar algum elemento nela
  • 0:27 - 0:29
    e então mudar algo nesse elemento,
  • 0:29 - 0:33
    e fazer isso um certo número
    de vezes por segundo.
  • 0:33 - 0:38
    Então, para o primeiro passo,
    vou achar a contagem regressiva pelo ID.
  • 0:38 - 0:39
    Simples.
  • 0:39 - 0:48
    (digitando)
  • 0:48 - 0:52
    Para o segundo passo, vou fazer uma função
    que executa uma contagem regressiva.
  • 0:52 - 0:55
    (digitando)
  • 0:55 - 0:57
    E o que vamos fazer...
  • 0:57 - 0:59
    Eu quero definir o 'textContent',
  • 0:59 - 1:04
    e eu quero que ele seja igual
    ao número anterior menos um.
  • 1:04 - 1:07
    E o 'textContent' vai ser
    uma cadeia de caracteres.
  • 1:07 - 1:10
    Então temos que tranformá-lo em um número.
  • 1:10 - 1:13
    Você pode fazer isso usando 'parsefloat()'
  • 1:13 - 1:16
    e então podemos subtrair um dele.
  • 1:16 - 1:22
    Então, finalmente, queremos chamar
    essa função em um intervalo,
  • 1:22 - 1:25
    o que significa um certo
    número de vezes por segundo.
  • 1:25 - 1:30
    E podemos fazer isso usando
    'window.setInterval()'.
  • 1:30 - 1:34
    E essa função recebe dois argumentos:
  • 1:34 - 1:38
    a função de retorno de chamada e
    o número de milissegundos para esperar
  • 1:38 - 1:41
    antes dessa função
    ser chamada de novo.
  • 1:41 - 1:43
    Nós podemos especificar
    a função de retorno de chamada
  • 1:43 - 1:47
    do mesmo jeito que especificamos
    para ouvintes de evento: pelo nome.
  • 1:47 - 1:49
    E então, está indo
    muito rápido agora
  • 1:49 - 1:52
    porque não especificamos
    o segundo argumento.
  • 1:52 - 1:55
    Quanto a isso, queremos que ele seja
    um certo número de milissegundos,
  • 1:55 - 1:59
    e queremos uma vez por segundo,
    então vamos colocar um mil
  • 1:59 - 2:01
    porque existem um mil
    milissegundos em um segundo.
  • 2:01 - 2:05
    Pronto, agora está
    diminuindo um por segundo.
  • 2:05 - 2:10
    Então é melhor você aprender o máximo que
    você puder nos próximos 490 segundos!
  • 2:10 - 2:15
    Há mais uma função de window que
    usamos às vezes no lugar de 'setInterval',
  • 2:15 - 2:17
    e ela é 'setTimeout'.
  • 2:17 - 2:22
    E eu vou mudar para ela, e ver
    se você consegue notar a diferença.
  • 2:22 - 2:24
    Tem que esperar um pouco.
  • 2:24 - 2:28
    Pronto, agora talvez você consiga ver
    que quando usamos 'setTimeout',
  • 2:28 - 2:34
    o navegador apenas chama
    a função uma vez, não repetidamente.
  • 2:34 - 2:39
    Isso não é tão útil para quando
    estamos fazendo animações.
  • 2:39 - 2:42
    Mas pode ser super útil em outros casos,
  • 2:42 - 2:46
    como se mostrarmos um aviso
    para nossos usuários e quiséssemos
  • 2:46 - 2:48
    escondê-lo após dez segundos.
  • 2:48 - 2:53
    Então deixe-me mudar isso
    de volta para 'setInterval'
  • 2:53 - 2:57
    Agora, quando estamos
    testando animações desse jeito,
  • 2:57 - 3:00
    deveríamos realmente ver como elas ficam
    em todos os pontos da animação,
  • 3:00 - 3:03
    como o que acontece
    quando chega a zero.
  • 3:03 - 3:05
    Bem, vai demorar um
    bom tempo para chegar lá,
  • 3:05 - 3:06
    e você vai ficar
    muito entediado
  • 3:06 - 3:11
    então vamos apenas mudar
    nosso dado inicial para cinco,
  • 3:11 - 3:12
    e ver o que acontece.
  • 3:12 - 3:17
    Quatro, três, dois, um, zero...
  • 3:17 - 3:19
    Menos um, menos dois.
  • 3:19 - 3:22
    Agora isso está ficando estranho.
  • 3:22 - 3:26
    Quando o mundo acaba, ele deveria
    apenas fazer "Kabum!" e parar de contar.
  • 3:26 - 3:30
    Então o que nós queremos fazer
    na verdade é parar essa animação
  • 3:30 - 3:33
    uma vez que ela chegue ao zero.
  • 3:33 - 3:36
    E podemos fazer isso usando
    uma condição if dentro da função.
  • 3:36 - 3:42
    Então, deixe-me começar guardando
    o tempo atual em uma variável
  • 3:42 - 3:45
    já que vamos usá-lo
    algumas vezes.
  • 3:45 - 3:51
    Então eu vou apenas pegar isso, colocar
    aqui e substituir isso com 'currentTime'
  • 3:51 - 3:56
    Agora, o que eu posso fazer é
    ter uma condição if para ter certeza
  • 3:56 - 4:01
    que apenas vamos atualizar o texto
    se 'currentTime' for maior que zero.
  • 4:01 - 4:05
    Esse é o único momento em que
    realmente queremos subtrair um.
  • 4:05 - 4:09
    Então eu vou precisar
    colocar isso aqui dentro.
  • 4:11 - 4:15
    Isso funciona, mas tem algo
    muito ruim nessa abordagem.
  • 4:15 - 4:20
    O navegador ainda está chamando
    a função 'countItDown' uma vez por segundo
  • 4:20 - 4:22
    enquanto a página web está aberta.
  • 4:22 - 4:25
    Você não deveria fazer navegadores
    chamarem funções sem motivo,
  • 4:25 - 4:28
    eles tem muitas outras coisas
    importantes para fazer.
  • 4:28 - 4:31
    O que queremos mesmo fazer
    é dizer ao navegador que
  • 4:31 - 4:36
    uma vez que chegue a zero, ele
    não precisa mais chamar essa função.
  • 4:36 - 4:40
    Podemos fazer isso usando um novo
    método: 'window.clearInterval()'.
  • 4:40 - 4:47
    Podemos colocá-lo nesse else aqui -
    'window.clearInterval()'.
  • 4:47 - 4:52
    Agora, precisamos passar um argumento
    para que ele saiba qual intervalo remover.
  • 4:52 - 4:56
    Porque podemos ter vários
    intervalos em uma página.
  • 4:56 - 4:59
    O jeito de sabermos
    qual intervalo remover
  • 4:59 - 5:03
    é guardar o resultado de
    'setInterval' em uma variável.
  • 5:03 - 5:08
    Então, agora que eu tenho ele em uma
    variável 'timer', posso copiar e colar ali
  • 5:08 - 5:11
    e agora ela sabe o que remover,
    então quando chegar a zero
  • 5:11 - 5:16
    deve parar de atualizar e
    deve parar de chamar a função.
  • 5:16 - 5:19
    Para cada animação que você faz,
    você deveria pensar cuidadosamente sobre
  • 5:19 - 5:22
    qual deveria ser a
    condição de parada.
  • 5:22 - 5:26
    E sim, você pode ter algumas animações
    que devem repetir e repetir, meus amigos -
  • 5:26 - 5:29
    mas é melhor que elas
    sejam animações muito boas.
  • 5:29 - 5:32
    Porque seu navegador
    está trabalhando toda vez
  • 5:32 - 5:34
    que chama essa função
    de retorno de chamada.
  • 5:34 - 5:37
    Agora faça sua versão e faça
    o mundo realmente fazer "Kabum!".
  • 5:37 - 5:39
    [Legendado por: Alberto Oliveira]
Title:
Animando DOM com setInterval (Versão vídeo)
Description:

more » « less
Video Language:
English
Duration:
05:39

Portuguese, Brazilian subtitles

Revisions