Javascript
Javascript
Javascript
Arquivo externo:
No arquivo HTML
alert("Olá, Mundo!");
Com a separação do script em arquivo externo é possível reaproveitar alguma funcionalidade em mais de
uma página.
querySelector
Antes de sair alterando nossa página, precisamos em primeiro lugar acessar no JavaScript o elemento que
queremos alterar. Como exemplo, vamos alterar o conteúdo de um título da página. Para acessar ele:
document.querySelector("h1")
Esse comando usa os seletores CSS para encontrar os elementos na página. Usamos um seletor de nome de
tag mas poderíamos ter usado outros:
document.querySelector(".class")
document.querySelector("#id")
Se você vai utilizar várias vezes um mesmo elemento da página, é possível salvar o resultado de qualquer
querySelector numa variável:
titulo.textContent
querySelectorAll
As vezes você precisa selecionar vários elementos na página. Várias tags com a classe .cartao por
exemplo. Se o retorno esperado é mais de um elemento, usamos querySelectorAll que devolve uma lista
de elementos (array).
document.querySelectorAll(".cartao")
Podemos então acessar elementos nessa lista através da posição dele (começando em zero) e usando o
colchetes:
// primeiro cartão
document.querySelectorAll(".cartao")[0]
Apesar de ser interessante a possibilidade de alterar o documento todo por meio do JavaScript, é muito
comum que as alterações sejam feitas quando o usuário executa alguma ação, como por exemplo, mudar o
conteúdo de um botão ao clicar nele e não quando a página carrega. Porém, por padrão, qualquer código
colocado no <script>, como fizemos anteriormente, é executado assim que o navegador lê ele.
Para guardarmos um código para ser executado em algum outro momento, por exemplo, quando o usuário
clicar num botão, é necessário utilizar alguns recursos do JavaScript no navegador. Primeiro vamos criar
uma função:
function mostraAlerta() {
alert("Funciona!");
}
// fazendo uma chamada para a função mostraAlerta, que será executada nesse momento
mostraAlerta()
botao.>
Existem diversos eventos que podem ser utilizados em diversos elementos para que a interação do usuário
dispare alguma função:
oninput: quando um elemento input tem seu valor modificado
onclick: quando ocorre um click com o mouse
ondblclick: quando ocorre dois clicks com o mouse
onmousemove: quando mexe o mouse
onmousedown: quando aperta o botão do mouse
onmouseup: quando solta o botão do mouse (útil com os dois acima para gerenciar drag'n'drop)
onkeypress: quando pressionar e soltar uma tecla
onkeydown: quando pressionar uma tecla
onkeyup: quando soltar uma tecla
onblur: quando um elemento perde foco
onfocus: quando um elemento ganha foco
onchange: quando um input, select ou textarea tem seu valor alterado
onload: quando a página é carregada
onunload: quando a página é fechada
onsubmit: disparado antes de submeter o formulário (útil para realizar validações)
Uma variável que armazena um string faz muito mais que isso! Ela permite, por exemplo, consultar o seu
tamanho e realizar transformações em seu valor.
Conversões
9.13 Concatenações
É possível concatenar (juntar) tipos diferentes e o JavaScript se encarregará de realizar a conversão entre os
tipos, podendo resultar em algo não esperado.
Como vimos, o JavaScript tentará ajudar realizando conversões quando tipos diferentes forem envolvidos
numa operação, mas é necessário estarmos atentos na maneira como ele as realiza:
var num1 = 2;
var num2 = 3;
var nome = "Caelum"
// Exemplo 1:
console.log(num1 + nome + num2); // imprime 2Caelum3
// Exemplo 2:
console.log(num1 + num2 + nome); // imprime 5Caelum
Argumentos em funções
É possível definir que a função vai ter algum valor variável que vamos definir quando quisermos executá-la:
function mostraAlerta(texto) {
// Dentro da função "texto" conterá o valor passado na execução.
alert(texto);
}
9.15 Array
Como obter um valor agora? Lembre-se que o tamanho de um array vai de 0 até o seu tamanho - 1.
No lugar de usar a função push, que adiciona o elemento como último do array é possível fazer:
Isso alterará o tamanho do array para dez e adicionará na última posição a string "Inovação", deixando as
posições intermediárias com o valor undefined.
Muitas vezes precisamos executar um trecho de código repetidamente até que uma condição seja
contemplada, ou enquanto uma condição for verdadeira. Para isso, o JavaScript oferece uma série de blocos
de repetição. O mais comum é o for.
for
O bloco for precisa de algumas informações de controle para evitar que ele execute infinitamente:
for (/* variável de controle */; /* condição */; /* pós execução */) {
// código a ser repetido
}
while
O bloco while executa determinado código repetitivamente enquanto uma condição for verdadeira.
Diferente do bloco for, a variável de controle, bem como sua manipulação, não são responsabilidades do
bloco em si:
var contador = 1;
Em JavaScript, podemos criar um timer para executar um trecho de código após um certo tempo, ou ainda
executar algo de tempos em tempos.
A função setTimeout permite que agendemos alguma função para execução no futuro e recebe o nome da
função a ser executada e o número de milissegundos a esperar:
Se for um código recorrente, podemos usar o setInterval que recebe os mesmos argumentos mas executa
a função indefinidamente de tempos em tempos:
É uma função útil para, por exemplo, implementar um banner rotativo, como faremos no exercício a seguir.
clearInterval
As funções temporais devolvem um objeto que representa o agendamento que foi feito. É possível usá-lo
para cancelar a execução no futuro. É especialmente interessante para o caso do interval que pode ser
cancelado de sua execução infinita:
// cancela execução
clearInterval(timer);
Há várias formas de implementar essa troca de imagens. Uma sugestão é manter um array com os
valores possíveis para a imagem e um inteiro que guarda qual é o banner atual.
Crie o arquivo banner.js na pasta js e não esqueça de adicionar ele no HTML da index.html
No arquivo banner.js:
function trocaBanner() {
bannerAtual = (bannerAtual + 1) % 2;
document.querySelector('.banner-destaque img').src =
banners[bannerAtual];
}
setInterval(trocaBanner, 4000);
Podemos criar no HTML index.html um novo link para controlar a animação. Crie dentro da section com
classe banner-destaque:
O JavaScript deve chamar clearInterval para pausar ou novamente o setInterval para continuar a
animação.
Precisamos editar o código anterior que chamava o setInterval para pegar o seu retorno. Será um objeto
que controla aquele interval e nos permitirá desligá-lo depois:
controle. {
if (controle.className == 'pause') {
clearInterval(timer);
controle.className = 'play';
} else {
timer = setInterval(trocaBanner, 4000);
controle.className = 'pause';
}
return false;
}
Por fim, podemos estilizar o botão como pause ou play apenas trabalhando com bordas no CSS, adicione os
estilos fora das media query existentes no arquivo estilos.css:
.destaque {
position: relative;
}
.pause,
.play {
display: block;
position: absolute;
right: 15px;
top: 15px;
}
.pause {
border-left: 10px solid #900;
border-right: 10px solid #900;
height: 30px;
width: 5px;
}
.play {
border-left: 25px solid #900;
border-bottom: 15px solid transparent;
border-top: 15px solid transparent;
}