Buscar

Introdução ao DOM e JavaScript

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 56 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 56 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 56 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Imprimir
INTRODUÇÃO
Olá, estudante!
JavaScript é uma linguagem que permitiu que páginas web, antes estáticas, tornassem-se interativas. Por
meio de métodos e propriedades do JavaScript, é possível realizar alterações diretamente no documento
HTML, manipulando o chamado DOM. 
DOM é um acrônimo para Document Object Model ou, na tradução, “Modelo de Objeto de Documentos”.
Essa especi�cação trata da tentativa de padronizar a forma como documentos web são construídos, a �m de
que navegadores e diferentes linguagens de programação consigam lê-los, independentemente de quem os
produziu e da plataforma utilizada. 
Nesta aula, você vai aprender a manipular documentos web por meio do DOM usando JavaScript, bem como
conhecer os métodos e elementos do DOM e ver como manipular estilos CSS de páginas usando JavaScript.
Bons estudos!
INTRODUÇÃO AO DOM
DOM, acrônimo para Document Object Model ou, na tradução, “Modelo de Objeto de Documentos”, é
considerado a API fundamental para manipular documentos HTML (FLANAGAN, 2011). A ideia por trás da
criação do DOM é que páginas da internet possam ser construídas com uma estrutura padronizada, assim,
diferentes linguagens de programação podem acessar e manipular objetos presentes no documento, que, por
sua vez, pode ser carregado corretamente de forma independente do navegador, do sistema ou da
plataforma utilizada. 
Na hierarquia DOM, elementos são representados como uma árvore, e em um documento HTML, as tags
representam os nós da árvore. O elemento de nível superior é denominado elemento pai, enquanto os
elementos internos são chamados de elementos �lhos e os elementos de mesmo nível são chamados de
irmãos, conforme Figura 1.
Figura 1 | Ilustração da árvore DOM de um documento web. Tags HTML representam os nós
Aula 1
APIS DE NAVEGADOR – MANIPULANDO DOCUMENTOS
Nesta aula, você vai aprender a manipular documentos web por meio do DOM, conhecer seus métodos e
elementos usando JavaScript, e manipular estilos CSS.
49 minutos
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao=… 1/56
Fonte: adaptada de Mariano; Melo-Minardi (2017).
Essa árvore DOM é uma representação deste mesmo código em HTML:
Código 1 | Árvore DOM
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title></title>
5 <meta>
6 </head>
7 <body>
8 <a></a>
9 <p></p>
10 <ul>
11 <li></li>
12 </ul>
13 </body>
14 </html>
Fonte: elaborado pelo autor.
Introdução a eventos no DOM
No DOM, a janela e os guias de um navegador são representados pelo objeto window, que possui a
propriedade document, que representa o conteúdo da janela (FLANAGAN, 2011). Com JavaScript, é possível
navegar pela árvore DOM, manipulando elementos e eventos. Em um arquivo HTML, inclua o seguinte código:
Código 2 | Arquivo HTML
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>DOM</title>
5 <meta charset="utf-8">
6 </head>
7 
8 <body onload="window.alert('Olá, mundo!')"></body>
9 
10 </html>
Fonte: elaborado pelo autor.
Note que, ao executar esse código, surge uma simples mensagem “Olá, mundo!” (conforme Figura 2) em uma
caixa de diálogo gerada pelo comando alert( ).
Figura 2 | Alerta gerado por um evento onload
Fonte: elaborada pelo autor.
Note que não seria nada diferente criar um simples script com um comando alert( ) embutido, entretanto,
aqui, utilizamos vários conceitos da manipulação do DOM. 
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao=… 2/56
Primeiro, utilizamos um atributo HTML para disparar um evento onload, que é executado no momento que a
tag é carregada, ou seja, como aplicamos à tag body, o evento será disparado imediatamente quando a tag for
carregada. Podemos imaginar um evento como uma ação que ocorre quando algum “gatilho” é disparado, e o
onload é um dos exemplos mais simples de gatilhos, pois é disparado quando alguma coisa é carregada, mas
há muitos outros tipos. Os mais comuns são os eventos que envolvem ações do mouse (como quando
clicamos com o mouse em algum lugar: onclick), ações do teclado (quando pressionamos uma tecla: keypress),
ações realizadas em formulários (como quando clicamos no botão de envio de um formulário: submit) ou
eventos de janela (como rolar na página, scroll, ou mesmo os eventos que envolvem o simples carregamento,
load). No exemplo apresentado, utilizamos um evento de janela (window), e, no caso, o método escolhido foi o
alert(), que exibe uma mensagem em uma caixa de diálogos. Uma lista completa de eventos e recursos pode
ser encontrada aqui: https://mzl.la/3q3kw64.
Manipulando o DOM: escrevendo em um documento
Podemos manipular o conteúdo de um documento HTML por meio do DOM, usando o objeto document no
JavaScript. Uma manipulação simples seria utilizar JavaScript para gravar informações diretamente no
documento, e, para isso, criamos um documento HTML, que vamos chamr de “index.html”, e outro arquivo
JavaScript, que vamos chamar de “script.js”:
Código 3
index.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>DOM</title>
5 <meta charset="utf-8">
6 <script src="script.js"></script>
7 </head>
8 <body></body>
9 </html>
script.js
document.write("Olá, mundo!")
Ao abrirmos o arquivo HTML no navegador, aparecerá a seguinte mensagem (Figura 3):
Figura 3 | Mensagem exibida no navegador
Fonte: elaborada pelo autor.
Note que a mensagem não estava inicialmente presente no documento HTML, mas quando acessamos a
ferramenta inspecionar no navegador (e clicamos na aba “Elementos”) podemos perceber que o texto está,
agora, presente dentro da tag Body. Observe a Figura 4.
Figura 4 | Código visualizado na ferramenta inspecionar do Chrome (pressione F12). Note que a tag body estava vazia no código que
declaramos inicialmente, e ela foi preenchida pelo script
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao=… 3/56
https://developer.mozilla.org/pt-BR/docs/Web/Events
Fonte: elaborada pelo autor.
Nesse exemplo, usamos o método write( ) para gravar uma mensagem diretamente no corpo do documento
(local de�nido pelo objeto document), e note que, se houver qualquer coisa no documento, o comando
document.write() irá gravar antes. Por exemplo, digamos que desejamos alterar o arquivo HTML:
<body>Tudo bem?</body>
Ao recarregarmos a página, veremos a �gura a seguir:
Figura 5 | Mensagem gerada pelo script é gravada antes da mensagem que já estava no <body>
Fonte: captura de tela elaborada pelo autor.
Podemos de�nir locais especí�cos para que as alterações ocorram, mas, antes, você precisa conhecer os
métodos de seleção de elementos no DOM, que veremos no próximo bloco.
VIDEOAULA: INTRODUÇÃO AO DOM
Nesta aula, você irá conhecer a árvore DOM (Document Object Model). 
Bons estudos!
MÉTODOS E ELEMENTOS DOM
Vimos, anteriormente, que é possível manipular um documento HTML usando JavaScript pelo objeto
document. Como exemplo, usamos o método write() para gravar uma mensagem na tela, entretanto, da
forma feita, as mensagens só poderiam ser gravadas no início do texto. JavaScript fornece uma série de
métodos para selecionar e manipular partes especí�cas de documento web. Por exemplo: podemos
selecionar elementos especí�cos do DOM por meio de quatro funções:
1. getElementById: seleciona um único elemento com base em seu identi�cador único (id).
2. getElementsByTagName: seleciona todos os elementos de tags de mesmo nome especi�cado.
3. getElementsByClassName: selecionatodos os elementos que possuem determinada classe (class).
Videoaula: Introdução ao DOM
Para visualizar o objeto, acesse seu material digital.
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao=… 4/56
4. querySelectorAll: seleciona elementos a partir de um seletor CSS.
Para exploração desses métodos, vamos utilizar um modelo de site bem simples, como podemos visualizar na
Figura 6:
Figura 6 | Modelo de site bem simples composto por quatro seções: (1) cabeçalho (vermelho), (2) seção principal de conteúdo (azul), (3)
barra lateral (verde) e (4) rodapé (cinza)
Fonte: captura de tela elaborada pelo autor.
A seguir, serão apresentados os códigos HTML (responsável pelo arcabouço da página) e CSS (responsável
pelos estilos) que geram essa página:
Index.html
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao=… 5/56
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>DOM</title>
5 <meta charset="utf-8">
6 <link rel="stylesheet" href="estilo.css">
7 <script src="script.js"></script>
8 </head>
9 <body>
10 <!-- Cabeçalho da página -->
11 <header>
12 <div id="logo">
13 <a>Meu site</a>
14 </div>
15 
16 </header>
17 
18 <!-- principal região -->
19 <main>
20 
21 <!-- Seção à esquerda --> 
22 <section>
23 <h1>Home</h1>
24 <p class="texto">Bem-vindo ao meu site.</p>
25 <p class="texto">Tudo bem?</p> 
26 </section>
27 
28 <!-- menu lateral direito -->
29 <aside>
30 <p>Barra lateral.</p>
31 </aside>
32 
33 </main>
34 
35 <!-- Rodapé -->
36 <footer>
37 Todos os direitos reservados.
38 </footer>
39 
40 </body>
41 </html>
estilo.css
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao=… 6/56
1 /* remove margens inseridas pelo navegador */
2 *{ margin:0; } 
3 
4 /* TAGS */
5 header{ 
6 height: 100px; /* altura */
7 background-color: red; /* fundo: vermelho */
8 }
9 section{ 
10 height: 200px; /* altura */
11 width: 70%; /* largura */
12 background-color: blue; /* fundo: azul */
13 float:left; /* alinhar à esquerda */
14 }
15 aside{ 
16 height: 200px; /* altura */
17 width: 30%; /* largura */
18 background-color: green; /* fundo: verde */
19 float:right; /* alinhar à direita */
20 }
21 footer{
22 clear:both; /* corrige problemas de alinhamento */
23 height: 30px; /* altura */
24 background-color: grey;/* fundo cinza */
25 text-align: center; /* texto centralizado */
26 }
27 
28 /* ID */
29 #logo{
30 color:white; /* cor texto: branco */
31 font-size: larger; /* fonte maior */
32 text-align: center; /* texto-centralizado */
33 }
34 
35 /* CLASS */
36 .texto{
37 color: yellow; /* cor amarelo */
38 }
Não é o objetivo desta aula discutir como esses códigos HTML e CSS foram implementados e sim como
acessá-los e manipulá-los usando JavaScript. Por isso, foram utilizados vários tipos distintos de tags e cores
nas seções para ilustrar como manipular o DOM usando JavaScript.
O getElementById é usado para selecionar um elemento com base no seu ID. No exemplo, temos apenas um
elemento com ID con�gurado, denominado “logo’, então, coletá-lo. Para tanto, crie um arquivo chamado
“script.js”:
1 var logo = document.getElementById('logo')
2 console.log(logo)
Ao executarmos esse código, vemos, no console, o valor null, e isso ocorre porque declaramos o script antes
do elemento (lembre-se de que o JavaScript lerá linha a linha, logo, se o script for carregado antes do
elemento, ele não conseguirá encontrá-lo), no entanto, podemos resolver isso alterando a posição de
chamada do script (movendo-o da tag para o , por exemplo) ou usar um evento onload para esperar que todo
arquivo HTML esteja carregado para que o script possa começar a executar. Preste atenção em como
podemos usar esse tipo de evento em um arquivo JS:
1 window.onload = ()=>{
2 var logo = document.getElementById('logo')
3 console.log(logo)
4 }
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao=… 7/56
Agora, observe o resultado no console:
Figura 7 | Conteúdo de um elemento coletado por getElementById
Fonte: captura de tela elaborada pelo autor.
Veja que, ao carregarmos o objeto para uma variável, todo o conteúdo da tag é selecionado e armazenado
nela. Uma vez que o objeto é armazenado em uma variável, podemos fazer alterações aplicando um novo
valor à propriedade innerText. Veja:
1 window.onload = ()=>{
2 var logo = document.getElementById('logo')
3 
4 logo.innerText = "Mudando o título"
5 console.log(logo)
6 }
Veja que, ao executarmos esse código, o título da página é substituído, conforme Figura 8:
Figura 8 | Substituindo um título
Fonte: captura de tela elaborada pelo autor.
Note que, dentro desse elemento, havia uma tag que foi removida, e isso aconteceu porque a propriedade
innerText permite a alteração apenas do texto. Podemos fazer alterações que permitam a incorporação de
códigos HTML usando a propriedade innerHTML:
logo.innerHTML = "<a>Mudando o título</a>"
O método getElementsByTagName permite coletar todos os elementos com um mesmo nome de tag. Por
exemplo: em nosso código, temos várias tags <p>, e podemos coletá-las usando:
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao=… 8/56
1 window.onload = ()=>{
2 var tags_p = document.getElementsByTagName('p')
3 
4 console.log(tags_p)
5 }
Note que, ao executarmos esse código, o JavaScript retorna um objeto do tipo HTMLCollection, assim como
temos na Figura 9.
Figura 9 | Coletando vários elementos
Fonte: captura de tela elaborada pelo autor.
Podemos manipulá-lo usando um laço de repetição:
1 window.onload = ()=>{
2 var tags_p = document.getElementsByTagName('p')
3 
4 for(tag of tags_p){
5 console.log(i)
6 }
7 }
Note que precisamos usar a palavra reservada of para indicar que queremos navegar pelos itens da variável
em questão. Observe o resultado:
Figura 10 | Navegando por resultados de uma consulta getElementsByTagName
Fonte: captura de tela elaborada pelo autor.
getElementsByClassName
Podemos usar o código a seguir para selecionar elementos com base no nome da classe:
1 window.onload = ()=>{
2 var class_texto = document.getElementsByClassName('texto')
3 
4 for(i of class_texto){
5 console.log(i)
6 }
7 }
Note que, assim como o getElementsByTagName, o método getElementsByClassName retorna uma lista de
objetos que podemos manipular usando laços. No exemplo, temos apenas duas tags que recebem a classe
“texto”. Veja o que será impresso no console:
Figura 11 | Usando getElementsByClassName
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao=… 9/56
Fonte: captura de tela elaborada pelo autor.
O querySelectorAll permite a realização de buscas avançadas com base em seletores CSS:
1 window.onload = ()=>{
2 var p_em_aside = document.querySelectorAll('aside p')
3 
4console.log(p_em_aside[0])
5 }
No código acima, recuperamos todas as tags que estão dentro de uma tag (seletor “aside p”). Note que esse
método também retorna uma lista de itens, mas, dessa vez, optamos por coletar o primeiro elemento
diretamente, usando colchetes e indicando o índice 0.
VIDEOAULA: MÉTODOS E ELEMENTOS DOM
Nesta aula, você vai aprender a selecionar elementos do DOM com base no ID, na class, na tag e no seletor
CSS usando os métodos JavaScript. Bons estudos!
DOM CSS
O CSS é a linguagem usada para con�guração de estilos da página, como cores, fontes, altura largura de
blocos, entre outras inúmeras funcionalidades. Por padrão, as cores são de�nidas no arquivo CSS e
incorporadas à página na tag , todavia, podemos alterar os estilos após o carregamento usando códigos
JavaScript. Em aplicações reais, a alteração de estilos pós-carregamento é de vital importância. 
Por exemplo: imagine que você está desenvolvendo uma página de cadastro de produtos e que ela foi
construída a partir de requisições assíncronas, em que, ao enviar o produto, não é necessário recarregar a
página. Em certas situações, isso poderá ajudar a melhorar a performance do site com um gigantesco número
de acessos, uma vez que os servidores não vão precisar enviar todas as informações novamente, entretanto,
como o usuário do sistema saberá que o envio foi feito? 
A solução mais simples para isso é exibir uma mensagem ao usuário de que o envio foi realizado com sucesso.
Em geral, isso é feito em um box com fundo verde e um sinal indicando o sucesso no envio. Esses
componentes visuais são construídos usando-se CSS, entretanto, podemos carregá-los para a página usando
os métodos e as propriedades da linguagem JavaScript. Observe a sintaxe de como isso pode ser feito:
[elemento-selecionado].style.[propriedade-css] = [novo-valor]
Para ilustrar isso, vamos alterar o estilo de alguns dos componentes da página criada anteriormente. No
exemplo a seguir, vamos alterar a cor de fundo da tag de vermelho para roxo.
Videoaula: Métodos e elementos DOM
Para visualizar o objeto, acesse seu material digital.
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 10/56
1 window.onload = ()=>{
2 
3 // selecionando o objeto
4 var selecionado = document.getElementsByTagName('header');
5 
6 // pegando apenas o primeiro resultado
7 selecionado = selecionado[0];
8 
9 // alterando a cor do fundo para roxo
10 selecionado.style.backgroundColor = 'purple';
11 
12 }
Figura 12 | Páginas antes e depois de executar o script
Fonte: captura de tela elaborada pelo autor.
Note que a propriedade CSS responsável por alterar a cor de fundo é background-color, entretanto, nós
utilizamos backgroundColor, e isso foi necessário pois o JavaScript não permite “-“ nos nomes das variáveis.
Por isso, para alterar propriedades CSS compostas, como background-color, text-align, font-size, entre outras,
é necessário remover o hífen e colocar em maiúscula a primeira letra da segunda palavra (por exemplo:
backgroundColor, textAlign, fontSize); além disso, uma vez feita a seleção, é possível aplicar várias
propriedades ao mesmo elemento, como:
1 // aplicando várias propriedades
2 selecionado.style.fontSize = '80px'; // aumentar fonte
3 selecionado.style.color = 'black'; // texto em preto
4 selecionado.style.width = '50%'; // largura = 50%
Figura 13 | A fonte do título foi aumentada e a largura do bloco reduzida pela metade. Note que o comando que altera a cor para o preto
não funcionou
Antes
Depois
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 11/56
Fonte: captura de tela elaborada pelo autor.
Note que a propriedade que altera a cor do texto não funcionou na prática (ainda que tenha sido aplicada à
tag ), e isso se deve ao fato de o texto estar embutido dentro de outra tag (uma div). Além disso, há uma
propriedade CSS aplicada diretamente a essa div que altera a cor para o branco. 
Para resolver esse problema, podemos fazer uma nova seleção partindo da seleção feita anteriormente. No
código a seguir, criaremos uma nova variável chamada “texto_selecionado”, e essa variável será responsável
por armazenar o resultado de uma busca pelo elemento de ID “logo” (ou seja, o texto “Meu site”).
1 // selecionando a div de id #logo
2 var texto_selecionado=selecionado.querySelectorAll('#logo')[0]
3 
4 // muda a cor do texto para preto
5 texto_selecionado.style.color = 'black';
Observe, na Figura 14, que, agora, a cor da fonte do título foi alterada, passando a ser preta.
Figura 14 | A cor do título passou a ser preta
Fonte: captura de tela elaborada pelo autor.
Por �m, repare no código a seguir:
var texto_selecionado=selecionado.querySelectorAll('#logo')[0]
Nele, há dois pontos de destaque:
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 12/56
('#logo'): o símbolo “#” antes do nome buscado indica que estamos procurando um ID; se estivéssemos
buscando uma classe, esse símbolo seria substituído por um ponto “.”;
[0]: é importante refrisar que, mesmo que a busca retorne apenas um elemento, o método
querySelectorAll retorna uma lista de itens, por isso, devemos indicar que queremos apenas o elemento
no índice zero.
Com os conhecimentos apresentados até aqui, você já é capaz de realizar quaisquer alterações no CSS usando
JavaScript. Por conta própria, teste algumas outras propriedades CSS e manipule-as usando JavaScript. Bons
estudos!
VIDEOAULA: DOM CSS
Nesta aula, você vai aprender a manipular o CSS usando JavaScript. Bons estudos!
ESTUDO DE CASO
Você foi contratado para trabalhar em uma agência de publicidade que também atua como desenvolvedora
de sites: a Empresa A. Nas últimas semanas, você tem recebido muitas atividades para concluir, em especial, a
pedido do time de recursos humanos. De fato, toda a equipe da empresa tem ouvido falar de você e, por isso,
outros setores querem a sua ajuda.
O time de desenvolvimento �nalmente percebeu que você estava pronto para um novo desa�o e o colocou
para trabalhar em um projeto de um cliente importante: uma agência de moda ou a Empresa B. Atualmente,
nossa agência cuida da publicidade da Empresa B, portanto, é de nosso interesse que o website siga os
valores e as estratégias de�nidas pelo setor de marketing. A Empresa B é uma organização jovem e moderna
e tem seu portfólio baseado na coleção da estação, por isso, decidiu que a cor de fundo do site deverá se
basear na estação atual. 
Nosso time de designers de�niu quatro tons para as quatro estações:
Primavera: #�d6ef
Verão: #fdf080 
Outono: #c0dd5d 
Inverno: #9dbce3
Esses números hexadecimais representam códigos de cores no padrão RGB (red, green, blue) e irão formar as
seguintes cores:
Figura 15 | Cores para as estações. Topo-esquerda: primavera #�d6ef; topo-direita: verão: #fdf080; rodapé-esquerda: outono: #c0dd5d;
rodapé-direita: inverno: #9dbce3
Videoaula: DOM CSS
Para visualizar o objeto, acesse seu material digital.
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 13/56
Fonte: elaborada pelo autor.
O sistema do site foi construído usando-se o framework CodeIgniter em PHP, mas você não precisa se
preocupar com a tecnologia usada no back-end, você apenas editará um script chamado “cores.js”, que será
incluído na página. 
As estações mudam próximas a essasdatas:
22 de setembro: primavera.
21 de dezembro: verão.
20 de março: outono.
21 de junho: inverno.
Entretanto, esse valor muda a cada ano, e é preferível para a empresa fazer a alteração de cores alguns dias
antes, para os clientes �carem cientes da nova estação que está por vir. Por isso, considere apenas os meses
para as trocas de cores (setembro, dezembro, março e junho).
Seu desa�o, agora, é construir um código fonte que altera a cor de fundo da página de acordo com a estação
do ano. Para isso, utilize o seu editor de código e um navegador para testar as implementações.
 Dica
Você pode obter a data em JavaScript usando a função Date(). No caso, você deve instanciar um novo
objeto para receber Date(). Dessa forma: var data = new Date();
Dia, mês e ano podem ser coletados do novo objeto usando-se os métodos getDate(), getMonth() e
getFullYear(), respectivamente (apenas para getMonth, é necessário somar um, pois ele retorna meses de
0 a 11).
RESOLUÇÃO DO ESTUDO DE CASO
Para solucionar esse desa�o, primeiro, devemos obter a data atual, pegar o número correspondente ao mês
e, em seguida, veri�car qual o mês atual para de�nir a cor que será aplicada à página. Por �m, podemos
alterar a cor de fundo da página modi�cando a propriedade background-color usando o seletor do body. Veja
como implementar isso:
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 14/56
1 // data atual
2 var data = new Date();
3 var dia = data.getDate();
4 var mes = data.getMonth()+1; 
5 var ano = data.getFullYear();
6 
7 // estação = [mes]
8 var outono = 3;
9 var inverno = 6;
10 var primavera = 9;
11 var verao = 12;
12 
13 var cor; // nenhuma cor definida
14 
15 // outono
16 if((mes >= outono)&&(mes < inverno)){
17 cor = "#c0dd5d";
18 }
19 // inverno
20 else if((mes >= inverno)&&(mes < primavera)){
21 cor = "#9dbce3";
22 }
23 // primavera
24 else if((mes >= primavera)&&(mes < verao)){
25 cor = "#ffd6ef";
26 }
27 // verão
28 else if(((mes >= 1)&&(mes < outono))||(mes==12)){
29 cor = "#fdf080";
30 }
31 
32 
33 // alterando a cor do background
34 document.body.style.backgroundColor = cor;
Coletamos o mês atual na linha 4 e precisamos somar 1 ao valor do mês, pois o JavaScript retorna uma lista
numérica iniciada de 0 a 11, logo, o mês de janeiro estaria na posição 0, o mês de fevereiro na posição 1 e
assim sucessivamente. Das linhas 7 a 11, indicamos o número do mês de cada estação, e das linhas 15 a 30,
de�nimos qual a cor correspondente a cada mês. Veja que o maior desa�o foi encontrado nos meses
correspondentes ao verão, pois deveria pegar os meses de dezembro, janeiro e fevereiro (ou seja, 12, 1 e 2),
por isso, usamos as regras: mês >= 1 e mês < 3 ou mês igual a 12 e, por �m, alteramos a cor do background na
linha 34.
 Saiba mais
Seletores CSS 
Aprenda mais sobre seletores CSS acessando este artigo. Disponível em: https://mzl.la/3r1W1p5. Acesso
em: 17 dez. 2021.
Elementos DOM HTML JavaScript
Conheça os elementos para manipulação de HTML com JavaScript. Disponível em: https://bit.ly/3f8lvvB.
Acesso em: 17 dez. 2021.
Eventos e DOM
Acesse o conteúdo do link a seguir e aprenda um pouco mais sobre manipulação de eventos e do DOM
usando JavaScript.
Disponível em: https://bit.ly/3JYI4Ru. Acesso em: 17 dez. 2021.
jQuery
Resolução do Estudo de Caso
Para visualizar o objeto, acesse seu material digital.
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 15/56
https://developer.mozilla.org/pt-BR/docs/Web/CSS/CSS_Selectors
https://www.w3schools.com/js/js_htmldom_elements.asp
https://diegomariano.com/fundamentos-do-javascript/#Eventos_e_DOM
jQuery é um dos frameworks JavaScript mais populares do mercado; ele permite uma manipulação do
DOM de forma mais simpli�cada. Disponível em: https://jquery.com/. Acesso em: 17 dez. 2021.
INTRODUÇÃO
Olá, estudante!
Ao adentrar no mercado de trabalho como desenvolvedor web, você poderá se deparar com momentos em
que será necessário renderizar componentes grá�cos em suas páginas. Em HTML, um dos componentes que
permitem a inserção de grá�cos é a tag <canvas>.
Elementos <canvas> podem ser, por exemplo, renderizados por JavaScript; para isso, JavaScript utiliza a
biblioteca WebGL (Web Graphics Library) para renderizar grá�cos bidimensionais (2D) ou tridimensionais (3D)
diretamente em um navegador web.
Nesta aula, você aprenderá um pouco mais sobre e a construção de desenhos básicos e animações usando
JavaScript.
Bons estudos!
INTRODUÇÃO AO CANVAS
O é um elemento HTML usado para renderização de grá�cos, ou seja, para a construção de desenhos, em
especial, realizados por linguagens como JavaScrip. O canvas pode ser usado, por exemplo, para construção
de jogos em HTML5.
Observe o código a seguir:
Código 1 | Código canvas
<canvas width="400" height="400"></canvas>
Fonte: elaborado pelo autor.
Esse código declara um elemento HTML do tipo Canvas, e podemos imaginar o Canvas como uma área
reservada para inserção de algum desenho. Nesse exemplo, nossa área tem tamanho de 400px de altura por
400px de largura. 
Vamos, então, ver um exemplo básico de , no entanto, vamos começar com arquivo HTML. O Canvas deve
estar declarado dentro da tag , e note que aplicamos um id para nossa tag, que passou a ser denominada
“desenho”, tendo 400x400px de tamanho.
index.html
Aula 2
APIS DE NAVEGADOR – MANIPULANDO ÁUDIO E GRÁFICO
Nesta aula, você aprenderá um pouco mais sobre e a construção de desenhos básicos e animações
usando JavaScript.
49 minutos
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 16/56
https://jquery.com/
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>DOM</title>
5 <meta charset="utf-8">
6 <link rel="stylesheet" href="estilo.css"> 
7 </head>
8 <body> 
9 <canvas id="desenho" width="400" height="400"></canvas>
10 <script src="script.js"></script>
11 </body>
12 </html>
Ao abrir esse código em seu navegador, você não verá nada além de uma tela em branco. Vamos criar um
arquivo CSS para inserir margens ao redor da área de desenho do e, na sequência, observe a Figura 1.
estilo.css
1 canvas{
2 border: 1px grey solid;
3 }
Figura 1 | Canvas vazio. Bordas inseridas por CSS
Fonte: captura de tela elaborada pelo autor.
Ao carregar a página, é possível ver que uma leve linha acinzentada contorna a região ao redor da área de
desenho. Agora, podemos fazer desenhos na tela, e para manipular o Canvas, é necessário utilizar JavaScript.
Além disso, note que a declaração do script externo é feita no �m do arquivo, imediatamente antes da tag . 
Vamos, então, construir nosso script que fará um desenho dentro da área delimitada pelo Canvas e que
renderizará um simples quadrado de 100px de altura por 100px de largura. Observe o código a seguir e a
Figura 2:
script.js
1 // seleciona o elemento do canvas
2 var canvas = document.getElementById('desenho');
3 
4 // variável de contexto 2d
5 var ctx = canvas.getContext('2d');
6 
7 // desenha um retângulo
8 ctx.fillRect(20, 20, 100, 100)
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 17/56
Figura 2 | Quadrado inserido no Canvas
Fonte: captura de tela elaborada pelo autor.
Perceba que nosso quadrado negro foi inserido no canto esquerdo da área de desenho do Canvas, agora,
vamos entender parte por parte docódigo.
Observe a linha a seguir:
var canvas = document.getElementById('desenho');
Nela, é feita a declaração de uma variável chamada canvas, e essa variável recebe o resultado de uma
consulta ao DOM, que seleciona o elemento id “desenho”. A seguir, declararemos uma variável chamada ctx:
var ctx = canvas.getContext('2d');
Antes de iniciar a renderização, o script precisa obter o contexto de renderização; para isso, é utilizado o
método getContext(), que deve receber o tipo de grá�co que se deseja produzir. No exemplo a seguir,
apresentaremos um grá�co de duas dimensões, logo, marcamos “2d”.
Seguindo esse contexto, podemos, então, fazer o primeiro desenho (um retângulo) utilizando o método
�llRect( ), que receberá quatro parâmetros:
1 ctx.fillRect(
2 distância para o eixo x,
3 distância para o eixo y,
4 largura,
5 altura
6 )
Nesse caso, vemos que a distância para o eixo x e y é de 20px, enquanto a largura e altura do quadrado é de
100px.
ctx.fillRect(20, 20, 100, 100)
Note que não especi�camos a cor do quadrado, logo, ele foi desenhado em preto. No próximo bloco, você
verá com mais detalhes como desenhar outras formas, aplicar estilos e alterar as cores. Até lá!
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 18/56
VIDEOAULA: INTRODUÇÃO AO CANVAS
Nesta aula, você aprenderá o que são elementos , bem como inicializá-los e criar formas básicas. 
Bons estudos!
DESENHANDO FORMAS, APLICANDO ESTILO E CORES
No bloco anterior, você viu os fundamentos do Canvas; nesta aula, você vai aprender a aplicar estilos e a
desenhar novas formas geométricas. 
Vamos começar adicionando um segundo quadrado, próximo ao primeiro:
1 // seleciona o elemento do canvas
2 var canvas = document.getElementById('desenho');
3 
4 // variável de contexto 2d
5 var ctx = canvas.getContext('2d');
6 
7 // desenha um retângulo
8 ctx.fillRect(20, 20, 100, 100)
9 
10 // segundo retângulo
11 ctx.fillRect(30, 30, 100, 100)
Figura 3 | Sobreposição de quadrados no Canvas
Fonte: elaborada pelo autor.
Para diferenciar os dois quadrados, é possível aplicar cores distintas usando a propriedade �llStyle. Para
selecionar uma cor, é possível aplicar a função rgb entre aspas, que recebe três valores, que vão de 0 a 255,
correspondentes às cores vermelho (r: red), verde (g: green) e azul (b: blue).
1 // desenha um retângulo
2 ctx.fillStyle = "rgb(180,0,0)";
3 ctx.fillRect(20, 20, 100, 100)
4 
5 // segundo retângulo
6 ctx.fillStyle = "rgba(0,0,180,0.7)";
7 ctx.fillRect(30, 30, 100, 100)
Videoaula: Introdução ao Canvas
Para visualizar o objeto, acesse seu material digital.
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 19/56
Figura 4 | Aplicando cores. O primeiro quadrado recebe um tom de vermelho e o segundo um tom de azul (com opacidade de 70%)
Fonte: elaborada pelo autor.
Note que, no segundo quadrado, substituímos a função rgb por rgba, que insere uma quarta camada
correspondente ao padrão alpha (ou índice de opacidade/transparência). O valor de 0.7 indica que queremos
70% de opacidade (ou 30% de transparência).
Desenhando um círculo
O JavaScript possui uma série de métodos que facilitam o desenho em Canvas. Por exemplo: podemos usar as
propriedades de path (caminhos) para a construção de um círculo. Observe o código a seguir:
1 // seleciona o elemento do canvas e cria contexto
2 var ctx=document.getElementById('desenho').getContext('2d');
3 
4 // inicia um novo path
5 ctx.beginPath();
6 
7 // configurações
8 var x = 100;
9 var y = 100;
10 var raio = 50;
11 var angulo_inicio = 0; 
12 var angulo_fim = Math.PI * 2;
13 
14 // desenha um arco
15 ctx.arc(x, y, raio, angulo_inicio, angulo_fim);
16 
17 // desenha as linhas
18 ctx.stroke();
Inicialmente, instanciamos o path com o método beginPath(), e note que optamos por separar os valores de
entrada necessários em variáveis cujos nomes são autoexplicativos. Uma variável digna de nota é a
“angulo_�m”, que determina o valor do ângulo �nal (lembre-se de que a circunferência é dada por 2πr, por
isso, devemos usar o método Math.PI para receber o valor de π e calcular o círculo perfeito). E para que o
nosso círculo �que completo, vamos utilizar o método arc( ), que recebe como entrada: margem à esquerda
(x); margem para o topo (y); raio do círculo; ângulo inicial; e ângulo �nal. Por �m, o método stroke( ) será
usado para desenhar as linhas. 
Este é o resultado �nal (vide Figura 5):
Figura 5 | Criando um círculo
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 20/56
Fonte: elaborada pelo autor.
Desenhando texto
Pode parecer estranho, mas, em alguns casos, pode ser necessário “desenhar” blocos de texto em elementos
<canvas>. Podemos fazer isso usando o método �lltext().
1 var ctx=document.getElementById('desenho').getContext('2d');
2 
3 // configurações
4 var x = 20;
5 var y = 100;
6 
7 // tamanho da fonte e tipo
8 ctx.font = '72px serif';
9 
10 // inserindo o texto
11 ctx.fillText("Olá mundo!", x, y);
Figura 6 | Inserindo texto no Canvas
Fonte: elaborada pelo autor.
Salvando como imagens
Você pode salvar qualquer imagem clicando com o botão direito sobre a área do Canvas (conforme Figura 7)
e, depois, em “salvar imagem como...”.
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 21/56
Figura 7 | Por padrão, Canvas salva imagens como PNG
Fonte: elaborada pelo autor.
Infelizmente, Canvas não salva as imagens em formato vetorial, o que gera uma grande perda de qualidade.
VIDEOAULA: DESENHANDO FORMAS, APLICANDO ESTILO E CORES
Nesta aula, você aprenderá a realizar desenhos básicos de formas geométricas usando <canvas>. 
Bons estudos!
APLICANDO ANIMAÇÃO E ÁUDIO
Podemos, ainda, fazer animações usando Canvas e JS. Vamos começar com um exemplo simples: uma barra
de progresso. Observe o código a seguir:
1 // iniciando o canvas
2 var canvas = document.getElementById('desenho')
3 var ctx = canvas.getContext('2d');
4 
5 // configurações
6 var x = 0;
7 var y = 0;
8 var altura = 50;
9 var largura = 0;
Aqui, declaramos um novo desenho 2D usando canvas. Nas con�gurações, delimitamos a posição x e y
(ambas 0), além da altura e largura da barra 50px e 0, respectivamente. 
Para construir uma animação, é preciso criar uma função que desenhe os objetos na tela e, a seguir, chamar
essa função repetidamente a cada período de tempo. Veja:
1 function animacao(){
2 ctx.fillRect(x, y, largura++, altura)
3 }
4 
5 setInterval(animacao, 100)
Esse código irá produzir a seguinte animação:
Figura 8 | Animação com Canvas: barra de progresso
Videoaula: Desenhando formas, aplicando estilo e cores
Para visualizar o objeto, acesse seu material digital.
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 22/56
Início Após 10 segundos Após 30 segundos
Fonte: elaborada pelo autor.
No código acima, criamos a função “animacao” cujo único comando é desenhar um novo retângulo na tela.
Esse retângulo começa da posição x e y (ambas equivalentes a 0), e altura inicial é de 50px, que é mantida
durante toda execução. O segredo da animação está no terceiro argumento passado à função �llRect:
largura++. Esse comando pegao valor atual de largura e o incrementa em 1 a cada chamada da função
animacao( ), ou seja, se, na primeira chamada, ele equivale a 0, na segunda, ele vale 1, na terceira, recebe o
valor 2, depois 3, 4, 5 e assim sucessivamente. 
As chamadas recursivas são feitas no comando:
setInterval(animacao, 100)
A função setInterval recebe como entrada outra função que será executada inde�nidamente por períodos de
tempo explicitados no segundo argumento (em milissegundos). No exemplo, usamos 100 milissegundos, o
que indica que, a cada segundo, a barra cresce 10px.
Movendo objetos
No exemplo anterior, usamos o script para aumentar o tamanho da barra, no entanto, se, em vez de
aumentar o tamanho da forma geométrica, quiséssemos movê-la pela tela, isso seria possível utilizando um
truque simples: a cada rodada de interação, precisaríamos apagar a forma geométrica previamente criada.
Podemos fazer isso com o comando clearRect( ), que recebe quatro parâmetros: x, y, largura e altura, e esses
dois últimos correspondem às medidas do elemento HTML .
Neste caso, vamos começar aumentando as medidas do nosso retângulo:
1 // iniciando o canvas
2 var canvas = document.getElementById('desenho')
3 var ctx = canvas.getContext('2d');
4 
5 // configurações
6 var x = 0;
7 var y = 0;
8 var altura = 100;
9 var largura = 100;
Agora, vamos implementar a função mova( ), e é importante que o nome das nossas funções represente o que
elas realmente fazem.
1 function animacao(){
2 // apagando o retangulo
3 ctx.clearRect(0, 0, canvas.width, canvas.height)
4 
5 // desenhando um novo retangulo
6 ctx.fillRect(x++, y, largura, altura)
7 }
8 setInterval(animacao, 100)
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 23/56
Observe, na Figura 9, o que acontece se executarmos o código:
Figura 9 | Animação usando Canvas: movendo um quadrado
Início Após 10 segundos Após 30 segundos
Fonte: elaborada pelo autor.
Observe como pegamos a largura e a altura <canvas> do na função clearRect( ): usando canvas. width e
canvas.height, respectivamente. Na função �llRect( ), alteramos o posicionamento do elemento usando x++,
ou seja, ele se movimentou apenas no eixo x. Se quisermos mover o objeto em outros sentidos, basta
alterarmos a variável que incrementamos:
Figura 10 | Movendo itens nos eixos x e y
x, y++
(após 10 segundos)
X++, y++
(após 10 segundos)
Fonte: elaborada pelo autor.
Caso deseje acelerar a velocidade da animação, reduza o valor do segundo argumento enviado para
setInterval() ou, caso deseje reduzir a velocidade, aumente esse valor.
Manipulando áudio
Apesar do Canvas não fornecer uma API para manipulação direta de áudio, ele permite que você faça
manipulações de áudios usando JavaScript e a tag <audio>, por meio dos objetos HTMLAudioElement
(FULTON; FULTON, 2011). 
Vamos começar declarando um arquivo de áudio no HTML. Primeiro, precisamos de um arquivo de áudio,
logo, para o exemplo, utilizaremos um pequeno arquivo com, aproximadamente, 2 segundos de duração,
chamado “som.mp3”, e o colocaremos no mesmo diretório que o arquivo “index.html” e “script.js”. Agora,
temos que fazer algumas pequenas alterações no arquivo HTML:
index.html
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 24/56
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Canvas & Audio</title>
5 <meta charset="utf-8">
6 </head>
7 
8 <body>
9 <!-- MUSICA -->
10 <audio id="musica" controls autoplay>
11 <source src="som.mp3" type="audio/mp3">
12 </audio> 
13 
14 <!-- Onde exibiremos dados da música -->
15 <canvas id="detalhes"></canvas >
16 
17 <!-- script -->
18 <script src="script.js"></script>
19 
20 </body>
21 </html>
O HTML5 permite que você inclua um arquivo de áudio usando a tag <audio>, e, ao abrir esse arquivo, seu
navegador, provavelmente, lhe mostrará um player interativo de áudio similar a este:
Figura 11 | Tag de áudio
Fonte: elaborada pelo autor.
Note que alteramos o id do canvas para “detalhes”. Nesse exemplo simples, vamos apenas ler o arquivo MP3
com o Canvas e extrair algumas propriedades básicas, como a duração da música. 
No “script.js”, inclua o seguinte código:
script.js
1 // inicia o canvas
2 var canvas = document.getElementById("detalhes");
3 var ctx = canvas.getContext("2d");
4 
5 // coleta o elemento do audio
6 var musica = document.getElementById("musica");
7 
8 // exibe a duração da música
9 ctx.fillText("Duração:"+musica.duration+" segundos.", 10, 10);
Figura 12 | Exibindo dados de uma tag <audio> usando Canvas
Fonte: elaborada pelo autor.
Nesse exemplo, a propriedade duration armazena o tempo em segundos da música, e podemos, ainda,
manipular outras propriedades, como: currentTime (posição atual), loop (modo repetição), autoplay (analisa
se o arquivo está iniciando automaticamente quando carregado), muted (muta o áudio), controls (mostra
controles), volume (deve estar entre 0 e 1), paused (pausa a música), ended (veri�ca se o áudio tocou por
completo), currentSrc (indica o endereço do arquivo de áudio), entre outros (FULTON; FULTON, 2011).
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 25/56
VIDEOAULA: APLICANDO ANIMAÇÃO E ÁUDIO
Nesta aula, você verá alguns exemplos de como implementar animações básicas usando Canvas e JavaScript. 
Bons estudos!
ESTUDO DE CASO
A equipe de desenvolvimento da Empresa A está muito satisfeita com o trabalho que você tem realizado como
desenvolvedor front-end, por isso, decidiram passar um novo desa�o para que resolva.
O time de marketing responsável pela gestão da marca da Empresa B percebeu que a maior parte dos
websites dos concorrentes apresentava um recurso interessante: uma barra de progresso que surgia no topo
da tela enquanto os itens eram carregados na tela. Por isso, decidiram pedir ao time de desenvolvimento que
implementasse o mesmo recurso.
Nessa tarefa, você irá trabalhar em colaboração com um outro desenvolvedor do time. Sua função será a de
cuidar dos aspectos visuais desse efeito, enquanto o outro desenvolvedor deverá cuidar da parte funcional da
barra de tarefas. Vocês combinaram que o efeito deve ter uma taxa de atualização a cada 10 milissegundos,
entretanto, a velocidade será de�nida por uma variável fator que será calculada pelo script que será
desenvolvido por outro desenvolvedor. Não se preocupe com como esse valor será calculado; para testes,
de�na o valor de fator = 50 e realize testes para a resolução de 1280px de largura. 
Além disso, a equipe de design também pediu que a barra de carregamento tenha a cor "#4169E1" (um tom
de azul), por isso, usando seu editor de códigos, construa um arquivo JavaScript que carregue a interface de
uma barra de carregamento usando <canvas> e utilize, como base, os arquivos HTML e CSS a seguir:
Código fonte do HTML:
1 <!doctype html>
2 <html>
3 <head>
4 <title>ModaS.A. | Moda a Seu Alcance</title>
5 <meta charset="utf-8">
6 <link rel="stylesheet" href="estilo.css">
7 </head>
8 <body>
9 
10 <!-- para telas com resolução de até 1280px -->
11 <canvas id="carregamento" 
12 height="10" width="1280"></canvas>
13 
14 <!-- [...] -->
15 
16 <script src="script.js"></script>
17 </body>
18 </html>
Código fonte do CSS:
1 *{ margin: 0; padding: 0; }
2 
3 #carregamento{
4 position: fixed;
5 background-color: #ccc;6. }
RESOLUÇÃO DO ESTUDO DE CASO
Videoaula: Aplicando animação e áudio
Para visualizaro objeto, acesse seu material digital.
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 26/56
Para a solução do problema proposto, podemos usar <canvas>; já a barra de progresso será preenchida a
partir do JavaScript.
O código a seguir apresenta uma solução para o problema em questão:
1 // iniciando o canvas
2 var canvas = document.getElementById('carregamento')
3 var ctx = canvas.getContext('2d');
4 
5 // configurações
6 var x = 0;
7 var y = 0;
8 var altura = 10;
9 var largura = 0;
10 var fator = 50;
11 var resolucao = 1280; 
12 
13 // cor da barra requisitada pela equioe
14 ctx.fillStyle = "#4169E1";
15 
16 // função que anima a barra de progresso
17 function animacao(){
18 ctx.fillRect(x, y, largura = largura+fator, altura);
19 
20 // CÓDIGO AVANÇADO: interrompe a função setInterval() 
21 // para evitar carregamento excessivo
22 if(largura > resolucao){
23 clearInterval(atualiza); 
24 }
25 }
26 
27 // atualiza a barra a cada 10 milissegundos
28 var atualiza = setInterval(animacao, 10)
Note que esse código rodará de maneira bastante rápida. Em menos de um segundo, toda a barra estará
carregada nesse exemplo. De fato, a velocidade do carregamento dependerá do script criado por outro
funcionário da equipe e será de�nida pela variável “fator”. Por padrão, usamos fator = 50, mas essa variável
deve estar disponível para que o outro colaborador a altere de acordo com cada caso. 
Note que a movimentação da barra é de�nida pela função animacao( ), descrita das linhas 17 a 25, e que o
intervalo de atualização é dado pela função setInterval( ), de�nida na linha 28. Por �m, note que aproveitamos
para incluir uma função avançada (linhas 20 a 24) que interrompe a execução de setInterval quando a barra
atinge o tamanho máximo da largura da página (no exemplo, de 1280px). 
Ao executar o código acima, você obterá um resultado próximo a este:
Figura 13 | Barra de carregamento à medida que o conteúdo é carregado: a atualização completa pode ocorrer em menos de um
segundo. (A) início do carregamento; (B) parte do conteúdo foi carregado; (C) metade do conteúdo foi carregado; (D) carregamento quase
concluído; (E) carregamento concluído
(A)
(B)
(C)
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 27/56
(D)
(E)
Fonte: elaborada pelo autor.
 Saiba mais
Biblioteca de áudios
Você pode conseguir arquivos de áudio gratuitos diretamente na biblioteca de áudio do YouTube.
Disponível em: https://bit.ly/3t9INJP. Acesso em: 17 dez.21. 
Capítulo de livro – Canvas
Aprenda a manipular áudio com Canvas. 
Disponível em: https://bit.ly/3JWJR9P. Acesso em: 17 dez. 21.
Resolução do Estudo de Caso
Para visualizar o objeto, acesse seu material digital.
INTRODUÇÃO
Olá, estudante!
O paradigma cliente-servidor é uma das bases do funcionamento da internet. Nele, um cliente (um usuário em
um laptop, por exemplo) requisita um serviço (como um website) a um servidor remoto (que, por sua vez,
responde enviando os dados ao cliente). Nas primeiras aplicações web, o processo de requisição e resposta
era feito de forma síncrona entre cliente e servidor, mas nos dias de hoje, as requisições assíncronas têm sido
bastante utilizadas, o que tem permitido que websites atendam a um maior número de clientes com um
menor consumo de rede e uma melhor experiência na interface. 
Aula 3
APIS DE NAVEGADOR – COMUNICANDO COM O SERVIDOR
O paradigma cliente-servidor é uma das bases do funcionamento da internet. Nele, um cliente (um
usuário em um laptop, por exemplo) requisita um serviço (como um website) a um servidor remoto (que,
por sua vez, responde enviando os dados ao cliente).
56 minutos
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 28/56
https://www.youtube.com/audiolibrary
https://www.oreilly.com/library/view/html5-canvas/9781449308032/ch07.html
Conexões assíncronas entre cliente e servidor em páginas web podem ser realizadas com HTML5 e JavaScript
a partir do objeto XMLHttpRequest (XHR) implementado na maioria dos navegadores. Ao uso de JavaScript
para comunicação entre cliente e servidor de forma assíncrona dá-se o nome de AJAX. Nesta aula, você
aprenderá mais sobre o objeto XHR e sobre AJAX.
Bons estudos!
MÉTODOS E PROPRIEDADES XMLHTTPREQUEST
Antes de adentrarmos no mundo do XMLHttpRequest, precisamos relembrar um conceito básico em
desenvolvimento web: o paradigma cliente-servidor. Nesse paradigma, computadores com grande poder
computacional fornecem um serviço que pode ser requisitado por clientes pela internet, como no caso dos
servidores web, que hospedam páginas de internet (Figura 1).
Figura 1 | Paradigma cliente-servidor. No exemplo, um servidor web fornece acesso a uma série de sites hospedados e os clientes podem
fazer requisições HTTP/HTTPS pela internet e receber, como resposta, documentos web
Fonte: Wikimedia Commons.
Entretanto, esse processo de requisição de um site a um servidor remoto pode ser feito de forma síncrona ou
assíncrona. Nas requisições síncronas, cada operação deve ser concluída para que uma nova operação possa
ser realizada, já nas requisições assíncronas, não é necessário aguardar o �m de uma operação. Podemos ver
a diferença na prática, por exemplo, quando preenchemos um formulário de cadastro e enviamos
informações para um servidor remoto. Na requisição síncrona, o navegador precisará recarregar a página
após enviar os dados, já na requisição assíncrona, isso não será necessário. À medida que os dados são
digitados, o navegador envia as informações para o servidor sem a necessidade de recarregar a página (na
prática, não seria necessário um botão de salvar, por exemplo). Se bem projetados, sistemas assíncronos
tendem a ter uma performance maior, uma vez que reduzem o �uxo de dados na rede (o servidor não precisa
enviar os dados de uma página inteira a cada requisição, pois apenas uma fração de dados precisa ser
enviada). Na Figura 2, isso é ilustrado pelos caminhões carregando os documentos pesados enquanto os
carrinhos de mão são usados para transportar dados.
Figura 2 | Abstração da comunicação síncrona (A) versus comunicação assíncrona (B)
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 29/56
Na comunicação assíncrona não é necessário aguardar que a comunicação esteja concluída para envio de dados, podendo ser feita em
paralelo. Na comunicação síncrona, há muito mais dados trafegados pela rede, e essa �gura não leva em consideração o cache produzido
nos navegadores.
Fonte: Wikimedia Commons.
Observe como a comunicação síncrona exige menos conexões, entretanto, há a necessidade de envio de
arquivos mais “pesados”, que tendem a ocupar uma maior largura de banda (Figura 2 A). Enquanto isso, na
comunicação assíncrona, há uma maior quantidade de conexões, mas elas podem ser feitas em paralelo,
transmitindo uma menor quantidade de dados e reduzindo as etapas de envio de arquivos “pesados” (Figura 2
B).
Em sistemas que requerem alto grau de processamento (como e-commerces com milhões de acessos diários),
a comunicação assíncrona pode reduzir o tráfego da rede e garantir que mais pessoas acessem ao mesmo
tempo. Entretanto, as comunicações assíncronas podem não representar grandes vantagens para sistemas de
pequeno porte (sites com acessos na casa dascentenas ou milhares por dia), e isso se deve ao fato de
requisitarem uma complexidade maior de implementação, especialmente no que diz respeito à segurança e à
garantia de que os dados foram entregues.
Assim, surgiu o XMLHttpRequest (XHR), um objeto ou uma API implementada em navegadores que facilitou a
comunicação assíncrona com servidores. A ideia do XHR é permitir que dados sejam comunicados por meio
de requisições HTTP (ou HTTPS) e arquivos no formato XML (na prática, outros formatos também podem ser
usados, como JSON).
Veja, a seguir, como instanciar um objeto XHR para comunicações assíncronas com o servidor:
var xhr = new XMLHttpRequest();
Entre os principais métodos e propriedades desse objeto, podemos citar, entre outras:
open( ): abre a conexão.
readyState: veri�ca o estado da conexão.
responseText: contém a resposta da conexão.
responseType: formato da resposta esperado (exemplo, json).
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 30/56
send( ): envia a requisição.
status: estado da requisição.
Agora que você já conhecer o objeto XMLHttpRequest, podemos, �nalmente, falar sobre a implementação
mais comum dele com JavaScript: a tecnologia AJAX. Você verá mais detalhes no próximo bloco.
VIDEOAULA: MÉTODOS E PROPRIEDADES XMLHTTPREQUEST
Nesta aula, você vai aprender um pouco mais sobre conexões síncronas e assíncronas e conhecer o objeto
XMLHttpRequest. 
Bons estudos!
INTRODUÇÃO AO AJAX
AJAX é um acrônimo para Asynchronous Javascript and XML ou, em português, "Javascript Assíncrono e XML".
Apesar do nome, a maior parte das implementações AJAX em sites modernos costumam usar JSON no lugar
de XML para transferência de dados. Uma das principais características do AJAX é o uso de scripts HTTP/HTTPS
para iniciar conexões com servidores remotos sem a necessidade de refresh (FLANAGAN, 2011). 
Com AJAX, é possível realizar requisições em segundo plano, sem a necessidade de recarregar a página. Isso
tem sido a base das chamadas Single Page Applications (SPA) ou aplicações de página única, que são páginas
que não precisam recarregar para apresentar componentes novos. Por exemplo, quando você usa o serviço
de e-mails da Google, o Gmail, ou quando você realiza um post no Facebook ou no Twitter, note que apenas
regiões especí�cas da página são recarregadas, fazendo com que a experiência de uso seja mais suave e
agradável. Isso ocorre pois são feitas requisições assíncronas.
Note que AJAX é uma tecnologia ou apenas uma terminação para indicar conexões assíncronas com
JavaScript, independentemente da linguagem usada no servidor. Na prática, AJAX utiliza a API XMLHttpRequest
para comunicação entre cliente e servidor, e, nessa requisição, o JavaScript é responsável por checar,
constantemente, o objeto que mantém o status da comunicação. Quando concluída essa tarefa, dados são
transferidos usando-se XML ou JSON, mas como implementar isso na prática?
AJAX na prática
Vimos, no bloco anterior, que é possível instanciar um objeto XHR usando o método XMLHttpRequest( ); dessa
forma:
var xhr = new XMLHttpRequest();
Após instanciar um objeto XHR, é preciso prestar atenção em algumas propriedades e métodos. O método
open( ) abre a conexão com o servidor remoto, para isso, ele recebe um verbo HTTP, como GET (usado para
requisição de dados) e POST (usado para envio de dados), além de uma URL. Por �m, a requisição é enviada
usando-se o método send( ).
1 xhr.open("GET", "https://um-site-qualquer.com.br")
2 xhr.send()
Para veri�car se a comunicação com servidor remoto está funcionando, é preciso vigiar as propriedades
onreadystatechange e suas outras propriedades (informalmente, dizemos que estamos “escutando” a
conexão). Entre as principais, estão as propriedades response e responseText, que irão conter a resposta da
requisição, mas também há outras propriedades de grande importância, como a propriedade readyState, que
retorna o cabeçalho da requisição, ou seja, se a conexão já está aberta ou não (Tabela 1).
Tabela 1 - Estados da propriedade readyState
Videoaula: Métodos e propriedades XMLHttpRequest
Para visualizar o objeto, acesse seu material digital.
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 31/56
Código Descrição
0 Requisição ainda não iniciada.
1 Requisição com o servidor estabelecida.
2 Pedido foi recebido.
3 Pedido sendo processado.
4 Solicitação concluída.
Fonte: adaptada de MDN Web Docs (2021).
Outra que vale a pena citar é a propriedade status, que retorna se já temos uma resposta para a requisição,
em geral, como um código de três dígitos (Tabela 2).
Tabela 2 | Mensagens HTTP
Código Descrição
100 - 199 Respostas de informação.
200 - 299 Respostas de sucesso.
300 - 399 Redirecionamentos.
400 - 499 Erros do cliente.
500-599 Erros do servidor.
Fonte: adaptada de MDN Web Docs (2021).
Entre os códigos mais conhecidos, estão:
200 (tudo ok).
401 (acesso não autorizado).
403 (acesso proibido).
404 (page not found: página não encontrada).
500 (erro interno no servidor).
Veja como onreadystatechange pode ser usada para escutar se alguma outra propriedade foi alterada:
Código 1 | Código onreadystatechange
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 32/56
1 var xhr = new XMLHttpRequest(); // cria objeto xhr
2 
3 xhr.responseType = "json"; // tipo da resposta
4 
5 // conecta ao site
6 xhr.open("GET", "https://um-site-qualquer.com"); 
7 xhr.send() // envia requisição
8 
9 var i = 0; // um simples contador
10 
11 // verifia se o estado da conexão mudou
12 xhr.onreadystatechange = ()=>{
13 
14 var pronto = xhr.readyState; // a conexão foi feita?
15 var estado = xhr.status; // status da requisição?
16 var resposta = xhr.response; // qual a resposta?
17 
18 i++; // contador de mudanças
19 
20 console.log("#", i) // contador de mudanças
21 
22 // como está a conexão
23 console.log("Status da conexão:", pronto); 
24 
25 // qual o código da resposta
26 console.log("Código da resposta:", estado); 
27 
28 // mostre a resposta
29 console.log(resposta); 
30 
31 }
Fonte: elaborado pelo autor.
O código apresentado acima declara um objeto xhr na linha 1; já na linha 3, é declarado o tipo de resposta
esperado (json); na linha 6, é aberta a conexão do tipo GET a um servidor remoto (esse site de exemplo não
existe); na linha 7, a conexão é enviada; na linha 12, veri�camos se houve alguma mudança do estado da
conexão; na linha 14, coletamos o estado da conexão, bem como o estado da resposta na linha 15. A resposta,
em si, foi recebida na linha 16, e nas linhas seguintes, apenas exibimos o resultado no console. 
Para o site em questão, não teremos uma resposta, pois se trata de um site inexistente (Figura 3).
Figura 3 | Resposta obtida para um site não existente
Note que apenas uma resposta foi obtida e possui código de conexão 4 (a conexão foi aberta e já possui resposta), mas não há um código
de resposta (0) e nem valores na propriedade response.
Fonte: elaborada pelo autor.
Caso estivéssemos acessando uma API de web services real (como a ferramenta {JSON} Placeholder,
disponível em https://bit.ly/3faOpLu), poderíamos ter uma resposta assim (Figura 4):
Figura 4 | Resposta para consulta ao endereço https://jsonplaceholder.typicode.com/todos
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao…33/56
https://jsonplaceholder.typicode.com/todos
Note que podemos ver várias mudanças de estado. Lembre-se que o código de resposta 200 indica que deu tudo certo (con�ra a Tabela 1
e a Tabela 2 para entender o signi�cado de cada código). Por �m, a resposta retorna um arquivo JSON com 200 itens.
Fonte: elaborada pelo autor.
Assim, podemos perceber que a tecnologia AJAX tem um grande potencial no desenvolvimento de aplicações
web, entretanto, ela deve ser usada com cuidado, uma vez que depende das conexões com os servidores
remotos e da forma como eles manipulam os dados. Nesse caso, servidores podem fazer uso das tecnologias
de banco de dados para armazenamento, e veremos mais detalhes disso no próximo bloco.
VIDEOAULA: INTRODUÇÃO AO AJAX
Nesta aula, você aprenderá como fazer uma conexão AJAX usando o objeto XMLHttpRequest. Bons estudos!
AJAX E BANCO DE DADOS
No bloco anterior, você aprendeu a realizar uma conexão AJAX com um servidor remoto. Você viu que, ao
realizar uma conexão com um site que não existe, retorna um erro de acesso, e isso ocorre pois é necessário
que o site que desejamos acessar forneça uma API (application programming interface) de acesso, que, em
geral, é feita usando-se tecnologias web services e pode ser construída a partir de diversas linguagens de
programação. Podemos, aliás, construir APIs web services usando JavaScript, entretanto, para isso, devemos
utilizar um servidor que permita executar JavaScript diretamente no back-end, como Node.js (LECHETA, 2018).
Não é objetivo desta aula mostrar como fazer isso; em vez disso, vamos falar do que acontece com os dados
enviados ou recebidos por conexões assíncronas.
A consulta a um serviço remoto, em geral, é feita usando-se formatos de armazenamento padronizado, como
XML ou JSON, mas raramente esses arquivos �cam salvos nesses formatos nos servidores. É mais comum que
o armazenamento de dados em servidores seja feito pelo uso de sistemas de gerenciamento de bancos de
dados (SGBD), que possuem ferramentas mais robustas para armazenamento, consulta, atualização e deleção
de dados, como os bancos de dados relacionais MySQL, MariaDB e Postgree. Assim, computadores servidores
Videoaula: Introdução ao Ajax
Para visualizar o objeto, acesse seu material digital.
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 34/56
podem fornecer diferentes serviços de acesso a websites e de banco de dados, que devem comunicar-se
entre si para que haja troca de informações (Figura 5). Cabe ao serviço web gerenciar essa conexão e
determinar quais dados podem ser acessados e como dados podem ser gravados, alterados ou deletados.
Figura 5 | Requisição e resposta entre cliente e servidor
No exemplo, o computador servidor pode fornecer dois serviços: web e banco de dados (esses serviços podem estar em computadores
distintos também); os clientes podem fazer requisições HTTP/HTTPS pela internet e receber, como resposta, documentos web; e o serviço
web pode consultar o serviço de banco de dados para busca ou armazenamento de informações.
Fonte: Adaptado, Wikimedia Commons.
Como esse processo de construção de uma API web services é um pouco complexo e foge do escopo desta
aula, vamos ilustrar esse processo utilizando o método POST para enviar dados para um servidor remoto
(vamos continuar usando a ferramenta {JSON} Placeholder). Observe o código a seguir:
Código 2 | ferramenta {JSON} Placeholder
1 var xhr = new XMLHttpRequest(); // cria objeto xhr
2 
3 var doc = {
4 "userId": 555,
5 "title": "Enviando dados",
6 "body": "Olá, mundo!"
7 }
8 
9 // verifia se o estado da conexão mudou
10 xhr.onreadystatechange = ()=>{
11 
12 var pronto = xhr.readyState; // a conexão foi feita?
13 var estado = xhr.status; // status da requisição?
14 var resposta = xhr.responseText; // qual a resposta
15 
16 // mostre apenas se tudo estiver ok (pronto => 4) 
17 if(pronto == 4){ 
18 console.log("Código da resposta:", estado); 
19 console.log(resposta); 
20 }
21 
22 }
23 
24 xhr.open(
25 "POST", 
26 "https://jsonplaceholder.typicode.com/posts"
27 ); 
28 xhr.send(doc); // envia requisição
Fonte: elaborado pelo autor.
Nas linhas 2 a 6, criamos uma variável (doc) para receber um objeto com as propriedades userId (identi�cador
do usuário), title (título da mensagem) e body (conteúdo da mensagem). Esses serão os dados que iremos
enviar para o servidor (para descobrir essas propriedades, tivemos que consultar a documentação da web
service em questão, e cada web service tem sua especi�cação, então, não se preocupe com esses nomes). Da
linha 8 à linha 20, apenas imprimimos os status do andamento do envio dos dados, e note que, a partir disso,
decidimos imprimir a resposta apenas se o status da conexão fosse 4, ou seja, a solicitação já estava concluída
(Figura 6).
Figura 6 | Status do andamento do envio dos dados
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 35/56
Note que o código 201 indica que os dados foram enviados com sucesso. O id que aparece na resposta indica que um novo dado foi
gravado na posição 101.
Fonte: elaborada pelo autor.
Agora, devemos prestar atenção nas linhas 23 a 26. Nelas, foram feitas as requisições do tipo POST; já na linha
27, enviamos os dados presentes na variável doc. O servidor remoto deve receber dados pela URL passada e
decidir o que fazer com eles. Nesse caso, o servidor pode gravar as informações em um banco de dados ou
apenas gravá-las em um arquivo JSON. Note que, como consumidores de uma web service, não sabemos o
que é feito com esse dado (o que insere uma camada extra de proteção ao servidor); obtemos, apenas, a
resposta indicando se o que era esperado foi feito ou não. No exemplo, sabemos que deu certo, pois
recebemos o status 201 e obtivemos, como resposta, um id indicando que o dado foi gravado.
VIDEOAULA: AJAX E BANCO DE DADOS
Nesta aula, você aprenderá um pouco mais sobre conexões assíncronas AJAX e sua interligação com os
processos de consulta e gravação em bancos de dados. 
Bons estudos!
ESTUDO DE CASO
A Empresa A, empresa de marketing e desenvolvimento de sites, está crescendo cada vez mais no mercado.
Por isso, novos trabalhos vêm surgindo e exigindo mais da sua participação como desenvolvedor front-end.
A Empresa B está preocupada com a concorrência, por isso, a equipe de desenvolvedores back-end da
Empresa A desenvolveu um sistema de consulta de preços para as principais concorrentes do mercado, bem
como uma web service que permite consultas remotas para que outros sistemas da empresa possam
consultar. O sistema de consulta funciona por meio de POST e requer, como entrada, os seguintes dados:
Quadro 1 | Dados de entrada
Campo Descrição Exemplo
user Nome do usuário jsadmin
auth_code Código de autenticação (senha única de cada usuário). 132�auiw1yhd821klaslf
product Nome do produto a ser pesquisado (o sistema possui um
algoritmo avançado de detecção de processamento de
linguagem natural).
Blusa de estampa da marca
BluSA (coleção do verão)
Fonte: elaborado pelo autor.
Por �m, a web service retorna os preços de todas as concorrentes para produtos similares, por exemplo:
Código 3 | Web service
Videoaula: Ajax e banco de dados
Para visualizar o objeto, acesse seu material digital.
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 36/56
1 {
2 "id":1,
3 "product":"Blusa estampada BluS.A. coleção verão",
4 "store":"BlusaXique",
5 "preco":25.996 }
Fonte: elaborado pelo autor.
A web service está localizada neste endereço: https://bit.ly/3HI8aq6, entretanto, o servidor ainda apresenta
instabilidades. Por isso, quando for chamar a função que envia os dados, função xhr.send(), deixe-a
comentada e crie uma função chamada imprimirRespostaTeste(), que deverá, apenas, imprimir formatado, em
uma tabela na tela, o seguinte array:
Código 4 | Array
1 var respostaTeste = [
2 {
3 "id":1,
4 "product":"Blusa estampada BluSA coleção verão",
5 "store":"Empresa B",
6 "price":25.99
7 }, 
8 {
9 "id":2,
10 "product":"BluSA coleção verão - blusa estampada",
11 "store":"Concorrente 1",
12 "price":89.99
13 }, 
14 {
15 "id":3,
16 "product":"Blusa BluSA col. verão (estampada)",
17 "store":"Concorrente 2",
18 "price":29.99
19 }, 
20 {
21 "id":4,
22 "product":"Blusa BluS.A. estampada | Collection Summer Miami",
23 "store":"Concorrente 3",
24 "price":19.99
25 }, 
26 {
27 "id":5,
28 "product":"BluS.A. - blusa estampada do verão ",
29 "store":"Concorrente 4",
30 "price":39.99
31 },
32 ]
Fonte: elaborado pelo autor.
Assim, usando o seu editor de códigos favorito e um navegador web para testes, construa um sistema que
faça uma consulta ao servidor remoto e imprima o resultado na tela. A consulta deve ser feita por uma função
chamada buscar( ) e a função send( ) deve estar comentada; além disso, no lugar dela, você deverá chamar a
função imprimirRespostaTeste( ).
 Dica
Para lhe ajudar, a equipe de design preparou os arquivos index.html e estilo.css, que constroem a
seguinte interface:
Figura 7 | Interface de consulta modelo
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 37/56
https://webservice.empresa-a.com/consultaprecos
Fonte: Lorem ipsum dolor sit amet.
Fique à vontade para usá-los ou não.
Código 5 | index.html
1 <!doctype html>
2 <html>
3 <head>
4 <title>Consulta concorrentes</title>
5 <meta charset="utf-8">
6 <link rel="stylesheet" href="estilo.css">
7 </head>
8 <body>
9 <h1>Sistema de consulta de produtos</h1>
10 <input type="text" id="produto" 
11 placeholder="Digite o nome do produto a ser pesquisado">
12 <button onclick="buscar()">Buscar</button>
13 
14 <div id="saida"></div>
15 
16 <script src="script.js"></script>
17 </body>
18 </html>
Fonte: elaborado pelo autor.
Código 6 | estilo.css
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 38/56
1 h1{
2 text-align: center;
3 padding: 20px 0 30px 0;
4 }
5 input{
6 display: block;
7 width: calc(100% - 40px);
8 padding: 0.75rem 0.75rem;
9 font-size: 1rem;
10 font-weight: 400;
11 line-height: 1.5;
12 color: #212529;
13 background-color: #fff;
14 background-clip: padding-box;
15 border: 1px solid #ced4da;
16 border-radius: 0.25rem;
17 }
18 button{ 
19 width: calc(100% - 15px);
20 display: block;
21 margin-top: 20px;
22 color: #fff;
23 background-color: #0d6efd;
24 border-color: #0d6efd;
25 font-weight: 400;
26 line-height: 1.5;
27 text-align: center;
28 text-decoration: none;
29 border: 1px solid transparent;
30 padding: 0.75rem 0.75rem;
31 font-size: 1rem;
32 border-radius: 0.25rem;
33 }
34 table{
35 margin-top: 20px;
36 width: calc(100% - 15px);
37 color: #333;
38 }
39 th{
40 background-color:#f4f4f4;
41 padding:10px;
42 }
43 td{
44 border-top: 1px #ccc solid;
45 padding: 10px; 
46 }
Fonte: elaborado pelo autor.
RESOLUÇÃO DO ESTUDO DE CASO
O protótipo apresentado neste código possui um código HTML funcional. Se o usuário digitar algo e realizar
uma busca, deverá obter uma tabela como resposta, entretanto, a consulta ao web service não deverá
funcionar, pois a linha com a função send( ) deverá estar comentada. 
Caso tenha construído o sistema baseado no modelo proposto (CSS e HTML), sua página �nal �cará
semelhante a esta:
Figura 8 | Consulta de exemplo
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 39/56
Fonte: elaborada pelo autor.
A seguir, apresentaremos um código de exemplo do script.js. Esse arquivo deve ter duas funções: buscar( ) e
imprimirRespostaTeste( )
Observe como �cou o código �nal:
Código 7 | Código de exemplo do script.js
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 40/56
1 function buscar(){
2 
3 var xhr = new XMLHttpRequest(); // cria objeto xhr
4 
5 var produto = document.getElementById("produto").value;
6 
7 console.log("Realizando consulta por",produto)
8 
9 var doc = {
10 "user": "jsadmin",
11 "auth_code": "132fiauiw1yhd821klaslf",
12 "product": produto
13 }
14 
15 // verifica se o estado da conexão mudou
16 xhr.onreadystatechange = ()=>{
17 
18 console.log("Consultando web service...")
19 
20 var pronto = xhr.readyState; // a conexão foi feita?
21 var estado = xhr.status; // status da requisição?
22 var resposta = xhr.responseText; // qual a resposta
23 
24 // mostre apenas se tudo estiver ok (pronto => 4) 
25 if(pronto == 4){ 
26 console.log("Código da resposta:", estado); 
27 console.log(resposta); 
28 }
29 
30 }
31 
32 xhr.open(
33 "POST", 
34 "https://webservice.Empresa-A.com/consultaprecos"
35 );; 
36 
37 // xhr.send(doc); // envia requisição
38 
39 imprimirRespostaTeste(); // teste desenvolvedor
40 
41 }
42 
43 function imprimirRespostaTeste(){
44 
45 var respostaTeste = [
46 {
47 "id":1,
48 "product":"Blusa estampada BluSA coleção verão",
49 "store":"Empresa B",
50 "price":25.99
51 }, 
52 {
53 "id":2,
54 "product":"BluSA coleção verão - blusa estampada",
55 "store":"Concorrente 1",
56 "price":89.99
57 }, 
58 {
59 "id":3,
60 "product":"Blusa BluSA col. verão (estampada)",
61 "store":"Concorrente 2",
62 "price":29.99
63 }, 
64 {
65 "id":4,
66 "product":"Blusa BluSA estampada | Collection Summer Miami",
67 "store":"Concorrente 3",
68 "price":19.99
23/05/2024, 08:47 wlldd_u2_des_jav
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=felipefaleixo%40gmail.com&usuarioNome=FELIPE+FERREIRA+ALEIXO&disciplinaDescricao=&atividadeId=3984965&atividadeDescricao… 41/56
69 }, 
70 {
71 "id":5,
72 "product":"BluSA - blusa estampada do verão ",
73 "store":"Concorrente 4",
74 "price":39.99
75 },
76 ]
77 
78 saida = document.getElementById("saida");
79 
80 gravar = "<table><tr><th>id</th><th>Produto</th><th>Loja</th><th>Preço</th></tr>";
81 
82 for(i of respostaTeste){
83 gravar = gravar + "<tr><td>" + i.id + "</td><td>" + i.product + "</td><td>" + i.store + 
"</td><td>R$ " + i.price + "</td></tr>";
84 }
85 
86