- Ambos nos permitem armazenar valores dentro de Strings
- Cada item armazenado é composto por uma chave (nome) e um valor
- Exemplo (salvando):
window.localStorage.setItem('personagem', 'Jake'); // pra sempre window.sessionStorage.setItem('quest', 'Salvar a Jujuba'); // temporariam.
- Lembre-se:
window.
localStorage
ewindow.
sessionStorage
- Lembre-se:
- Exemplo (recuperando):
let nome = localStorage.getItem('personagem'); // retorna "Jake" let objetivo = sessionStorage.getItem('quest'); // retorna "Salvar a Jujuba"
- Exemplo (salvando):
- O objeto
window
possui o objetoJSON
que contém métodos de conversão do formato JSON entre string e objetos JavaScript- De JavaScript para string (serialização):
JSON.stringify({ nome: 'Flavio', sobrenome: 'Coutinho' }); // retorna '{"nome":"Flavio","sobrenome":"Coutinho"}' (uma string)
- De string para JavaScript (desserialização):
let banco = JSON.parse('{"nome":"Itaú","codigo":"341"}'); console.log(banco.nome); // imprime Itaú
- De JavaScript para string (serialização):
- Bibliotecas JavaScript
- jQuery
- Reimplementando PhotoSnap 📷 x2
-
O que são e como usar
-
Exemplos:
moment.js ~ lidando com datas
cheet.js ~ criando easter eggs
underscore.js ~ trabalhando com vetores
- São códigos reutilizáveis em vários contextos
- Surgiram inicialmente para:
- Amenizar os problemas de compatibilidade entre navegadores
- Exemplos: Prototype, MooTools, YUI, jQuery
- Tornar o uso da linguagem mais agradável
- Exemplos: underscore, lodash
- Amenizar os problemas de compatibilidade entre navegadores
- Outros objetivos:
- Consertar problemas na linguagem
- Exemplos: moment.js, RequireJS, Browserify
- Coisas variadas
- Exemplos: criar gráficos, criar jogos, criar easter eggs, criar slides etc
- Consertar problemas na linguagem
- Tipicamente, o criador disponibiliza 01 arquivo
.js
que você deve incluir em suas páginas- Podemos, então, usar as funções/objetos globais da biblioteca
nos nossos arquivos
.js
- Podemos, então, usar as funções/objetos globais da biblioteca
nos nossos arquivos
- Basicamente:
- Entrar na página da biblioteca
- Ler as instruções para incluí-la. Normalmente:
... <script src="biblioteca.js"></script> <!-- ⬅️ --> <script src="meu-proprio-codigo.js"></script> </body> </html>
- Ler a documentação das funções da biblioteca
Exemplo: moment.js
- Objetivo: trabalhar facilmente com datas. Por exemplo:
- Operações com datas:
let agora = moment(); let entrega = agora.add(7, 'days');
- Escrever "quanto tempo se passou":
let apollo11 = moment('20071969', 'DDMMYYYY'); let quantoTempo = apollo11.fromNow(); alert('Alunamos há: ' + quantoTempo); // 48 years ago
- Operações com datas:
Exemplo: cheet.js
- Objetivo: criar easter eggs em uma página web
let dinheiro = 100; let somDeSucesso = document .createElement('audio'); somDeSucesso.src = 'blip.mp3'; cheet('⬆️ ⬆️ ⬇️ ⬇️ ⬅️ ➡️ ⬅️ ➡️ b a', function() { dinheiro += 1000; somDeSucesso.play(); });
Exemplo: underscore.js
- Objetivo: facilidades para trabalhar com vetores etc.
- Exemplo: (a) achatar vetores e (b) embaralhar cartas
let naipeOuro = ['♦️ás', '♦️2', ... '♦️rei']; let naipePaus = ... ... let baralho = [naipeOuro, naipePaus, naipeEspada, naipeCopas]; baralho = _.flatten(baralho); // (a) "achatou" os vetores baralho = _.shuffle(baralho); // (b) embaralhou as cartas
- Nota: o arquivo
underscore.js
expõe um único objeto: owindow._
- Nota: o arquivo
- Funcionamento básico e seletores
- Atribuindo eventos
- Estilizando elementos
- Efeitos visuais
-
Criada em 2006 por John Resig
- Pronuncia-se djeiquíulri
- Objetivos:
- Resolver incompatibilidade entre navegadores
- Aumentar expressividade do código
- Simplificar interfaces complexas
- Implementar funções corriqueiras
- Chegou a ser usada por quase 75% de toda a Web
- Em uma página, você deve incluir o arquivo
jquery.js
. Há 2 formas:- Baixando o arquivo
jquery.js
e colocando-o com o seu projeto:<script src="js/jquery.js"></script> <script src="js/meu-proprio-codigo.js"></script> </body> </html>
- Usando o
jquery.js
hospedado em uma CDN (i.e., na nuvem)- CDN é uma rede de computadores para hospedar arquivos para sites
<script src="http://algumacdn.com.br/jquery.js"></script> <script src="js/meu-proprio-codigo.js"></script> </body> </html>
- CDN é uma rede de computadores para hospedar arquivos para sites
- Baixando o arquivo
[CDN]: Content Delivery Network
- O
jquery.js
disponibiliza apenas 1 objeto/função, que possui toda a funcionalidade da biblioteca:window.jQuery = $ = function(seletor) { // ... zilhão de funções úteis aqui }
- Repare que
$
é um nome válido para uma variável em JavaScript, e é exatamente a variável que expõe a "função jQuery" - A função
$
(jQuery) recebe uma string com um seletor CSS, igual adocument.querySelectorAll
- Repare que
- Com jQuery, praticamente tudo é feito em 2 passos:
- Seleciona-se um ou mais elementos
- Executa-se alguma lógica com eles
- Exemplo: alterando o conteúdo HTML de um elemento usando jQuery e em "vanilla JavaScript":
// Usando jQuery
$('#pokemon').html('Pikachu');
// $('#pokemon') == jQuery('#pokemon')
// Em "vanilla js" (js puro)
let el = document.querySelector('#pokemon');
el.innerHTML = 'Pikachu';
- Passamos um seletor CSS para a função
$
- Veja a documentação da função
$
(ou função jQuery) - Ela retorna um "objeto jQuery", que é uma coleção de elementos HTML
- Veja a documentação da função
- Um objeto jQuery possui vários métodos e eles atuam na coleção
inteira:
$('p').html('It\'s me, Maaaario!'); // alterou o innerHTML de TODOS os parágrafos da página
- Experimento: vá para a página do jQuery e execute essa linha!
- Exemplo: na prática da exploração espacial (botões '+'/'-')
-
// versão jQuery $('button').click((e) => { let $p = $(e.currentTarget).closest('p'); $p.toggleClass('expandido'); $p.html($p.hasClass('expandido') ? '-' : '+'); });
// versão "vanilla js" let botoes = document.querySelectorAll('button'); for (let bEl of botoes) { bEl.addEventListener('click', (e) => { let pEl = e.currentTarget.parentNode; let colocou = pEl.classList.toggle('expandido'); e.currentTarget.innerHTML = colocou ? '-' : '+'; }); }
- Usando jQuery, há atalhos para colocar eventos em elementos ou em coleções deles (objeto jQuery)
-
$('.ajuda').click(ajuda);
document.querySelectorAll('.ajuda') .forEach(el => el.addEventListener('click', ajuda); );
- Outros eventos:
$colecao.click(callback); // addEventListener('click', callback) $colecao.mousemove(callback); // 'mousemove' $colecao.keyup(callback); // 'keyup' $colecao.change(callback); // 'change' (no input) $colecao.hover(callbackOver, callbackOut);
- Objetos jQuery podem ser estilizados, como em "vanilla js", usando:
- (a) classes:
-
$('#tutorial').toggleClass('big');
document.querySelector('#tutorial') .classList.toggle('big');
- (b) propriedades CSS diretamente:
-
$('#tutorial').css('width', '50px');
document.querySelector('#tutorial') .style.width = '50px';
- Veja a descrição da função
.css(prop, valor)
na documentação
- Algumas funções para fazer efeitos visuais:
$colecao.fadeIn(); // faz elementos surgirem com opacity [0, 1] $colecao.fadeOut(); // faz elementos desaparecerem [1, 0] $colecao.fadeToggle(); // alterna fadeIn()/fadeOut() $colecao.slideDown(); // faz elementos surgirem de cima para baixo $colecao.slideUp(); // faz elementos desaparecerem para cima $colecao.slideToggle(); // alterna slideDown()/slideUp()
- A partir do elemento selecionado, é possível chegar até seus parentes:
-
<div class="sanfona"> <h2>Tópico 1</h2> <p>Sobre o tópico 1...</p> <h2>Tópico 2...</h2> <p>Sobre o tópico 2...</p> </div>
let $topicos = $('.sanfona h2'); $topicos.click(e => { let $topico = $(e.currentTarget); let $p = $topico.next(); // ← ← ← $p.slideToggle(); });
- Veja todos os métodos aqui. Alguns são:
$colecao.next(); // irmão seguinte de cada elemento $colecao.prev(); // irmão anterior... $colecao.parent(); // pai de cada elemento $colecao.find(seletor); // filhos que atendam ao seletor $colecao.closest(seletor); // ancestral mais próximo -> seletor
- Relembrando...
- Novo enunciado
- O código da atividade PhotoSnap está pronto em vanilla JavaScript, no
arquivo
script/balaozinho-vanilla.js
- Você deve recriar a mesma funcionalidade usando jQuery, no arquivo
script/balaozinho-jquery.js
(que está vazio)
- Você deve recriar a mesma funcionalidade usando jQuery, no arquivo
- Baixe os arquivos. Veja que está funcionando!! Agora você deve
refazer o exercício, conforme o enunciado completo, usando a biblioteca
jQuery
- Repare que você deve incluir
script/balaozinho-jquery.js
em vez descript/balaozinho-vanilla.js
- Altere o
index.html
para refletir isso!
- Altere o
- Repare que você deve incluir
- Página da jQuery: http://jquery.com/