Curso Desenvolvedor Web Completo + 10 de projetos

Curso IV - Unidade 02 - Introdução ao jQuery

159 a 161 - O que é jQuery / Como realizar o download do jQuery / Como a API jQuery é organizada
O jQuery é uma biblioteca JavaScript que facilita a execução de rotinas simplificando algumas manipulações do DOM e do html.
Podemos utilizar a biblioteca jQuery diretamente em um link interno para ela ou através de links externos.
O dowload da biblioteca é feita no site jQuery
A API jQuery é dividaida em 10 seções:
  • Núcleo da jQuery
  • Seletores
  • Atributos
  • Percurso
  • Manipulação
  • CSS
  • Eventos
  • Efeitos
  • AJAX
  • Utilitários

Curso IV - Unidade 03 - Fundamentos de jQuery

Aula 163 - Adicionar jQuery na página
Criar a página inicial de estudo.
Para adicionar o jQuery na página devemos criar o link para o src da API.
Para executarmos funções no jQuery podemos executar os scripts da seguinte forma:
jQuery(document).ready(function (e) {
alert('Pronto, seu DOM foi carregado');
});
Essa rotina jQuery(document).ready pode ser substituida pelo símbolo $. Dessa forma todas as instruções em jQuery podem ser iniciadas dentro do <script> apenas iniciando com o sinal:
$(function (e) {
alert('Pronto, seu DOM foi carregado mais facilmente');
});
Aula 164 - Selecionar elementos DOM utilizando seletores
Podemos selecionar elementos do html apenas utilizando o operador $. Esse elemento funciona da mesma forma que a instrução document.getElementByTagName() do JS.
Desse modo quando fazemos essa instrução em jQuery:
alert('Essa página contém ' + $('a').length + ' links contados com jQuery');
É o mesmo que fazermos essa em JS Puro:
let teste = document.getElementsByTagName('a').length;
alert('Essa página contém ' + teste + ' links contados com JS puro');
Podemos selecionar tags aninhadas em jQuery apenas informando sua ordem. Essa rotina não funciona no JS Puro.
Aqui só serão contados os elementos do tipo <a> que estejam dentro da tag <nav> alert('Essa página contém ' + $('nav a').length + ' links contados com jQuery');
Em JS Puro essa rotina retorna o valor '0':
let teste = document.getElementsByTagName('nav a').length;
alert('Essa página contém ' + teste + ' links contados com JS puro');
Podemos manipular o estilo CSS dos elementos utilizando a notação apresentada acima seguida de .css('propriedade','valor'):
$(function () {
$('nav a').css('color', 'red');
});
É possível também encadear várias instruções na mesma linha:
$(function () {
$('nav a').css('color', 'red').css('text-decoration', 'none');
});
Para selecionar apenas o primeiro elemento (como no :first-child) basta inserir :first após o seletor:
$('nav a:first').css('color', 'yellow'); Tmabém é permitido a selecão com :last, :odd, :even e :nth().
Podemos selecionar pelo conteudo da tag utilizando :contains('valor_desejado').
$('nav a:contains("Argentina")').css('color', 'pink');
Aula 165 - Selecionar elementos através de atributos
Podemos fazer seleções de elementos através de propriedades. Por exemplo, se queremos selecionar as <li> que tenham classes definidas (independente do nome das classes), podemos selecionar utilizando o nome da propriedade (não o seu valor):
$('li[class]').css('background-color', '#FF9');
$('li[id][title]').css('background-color', '#00F');
Podemos selecionar com o valor do da propriedade também:
$('li[id="texto1"]').css('background-color', '#0F0'); Para fazer a seleção pelo nome do atributo podemos utilizar a mesma sintaxe que no CSS ('.' para classes e '#' para ids).
Aula 166 - Projeto da Unidade
Para selecionar propriedades apenas pelo texto final do seu valor podemos preceder o nome da propriedade com '$'. Preciso verificar melhor esse coringa.
$('a[href$= ".zip"]') Podemos inserir tags html antes ou depois do seletor com as propriedades .before() e .after()
$('a[href$= ".zip"]').before('<img src="./images/icon_zip.gif" />');

Curso IV - Unidade 04 - Além do básico

Aula 167 - Inserir conteudo
Além de utilizar o .after() e .before() podemos inserir elementos utilizando a função .insertAfter() e .insertBefore(). Nesse caso devemos passar primeiro o elemento a ser inserido e depois o local onde queremos inserir.
$('<li><img src="./image/foto4.jpg" />').insertBefore('li:first-child');
$('<li><img src="./image/foto5.jpg" />').insertAfter('li:nth(2)');
$('li:first').after('<li><img src="./image/foto6.jpg" />');
Aula 168 - Criar e pegar conteudo
Outra forma de adicionar conteudo no html é com as funções .append(), .prepend() e .html(). A primeira adiciona ao final dos elementos, a segunda no início e a terceira inclui apenas o conteúdo a uma tag já existente:
$('ul#listacursos').append('<li>Curso Bootstrap Fundamental</li>');
$('ul#listacursos').prepend('<li>Curso PHP Fundamental</li>');
$('h1').html('Formação Desenvolvimento Web Completo');
Aula 169 - Alterar atributos de um elemento
Podemos adicionar ou remover atributos em um elemento com as funções .attr() e .removeAttr()
$('a').attr('title', 'Alpes Suiços');
$('a').attr('target', '_blank');
$('a').removeAttr('target');
Aula 170 - Remover, alterar e embrulhar elementos
Podemos remover tags diretamente através da função .remove() aplicada ao seletor desejado. Podemos susbtituir uma tag inteira com a função .replaceWith(). Caso desejemos apenas substituir o valor interno da tag podemos utilizar a função .html(). Por fim é possível envolver uma tag com a função .wrapAll() (envolve por fora da tag selecionada) e .wrapInner() (envolve os elementos internos da tag selecionada).
$('li:last').remove();
$('li.especifico').remove();
$('li:last').replaceWith('<li>Curso de Bootstrap</li>');
$('li:last').html('Novo texto');
$('ul').wrapAll("<div style='border: 1px solid #ccc'></div>");
$('div').wrapAll('<fieldset><legend>wrapAll</legend></fieldset>');

Curso IV - Unidade 05 - Scrolling Conteúdo

Aula 171 - Detectar as dimensões da janela de um documento
Através dos objetos $(window) e $(document) podemos acessar diversas propriedades da área do navegador e do documento. Aqui vemos as propriedades width e height. Quando acessamos essas propriedades através do $(window) recebemos os valores do tamanho atual da janela. Já pelo objeto $(document) recebemos os valores do tamanho do documento incluindo áreas que estão além das scrollbars.
Aula 172 - Encontrar a posição de um elemento Aula 172 - Encontrar a posição de um elemento 2 Aula 172 - Encontrar a posição de um elemento 3
Para verificarmos a posição de um elemento utilizamos a propriedade .position() seguida de qual parametro queremos verificar (top ou left). Essa posição pode variar de acordo com o tipo de position definido (absolute, fixed, relative ou static).
Já com a função .offset() recuperamos a posição do elemento filho mais o elemento pai.
Quando queremos nos referir a um elemento pai utilizamos a função .offsetParent().
Aula 173 a 177 - Como alterar o scroll de uma página a partir de um evento / Como alterar o scroll direcionando para um elemento / Como alterar o scroll para mais de um elemento / Ajustando a altura e largura dos elementos / Redimensionar elementos
Para animar a rolagem de elementos de acordo com o tamanho da tela selecionamos o elemento e executamos uma função vinculada ao elemento .clic(). No exemplo executamos no documento (através da seleção do body) uma animação com a função .animate({scrollTop:300}, 1000).
Nesse caso fazemos um scroll em todo o documento de 300px com a duração de 1 segundo.
$('nav li:nth-child(2)').click(function (e) {
$('html,body').animate({ scrollTop: 300 }, 1000);
});
Sabendo de antemão qual a altura total da tela podemos definir o tamanho para cada elemento de modo que o scroll seja em toda a tela de modo fixo. Entretanto para que o scroll funcione em qualquer dispositivo podemos alterar o valor fixo atribuindo a função de .offset().top. Desse modo vamos recuperar o valor de acordo com as propriedades do elemento.
$('nav li:nth-child(2)').click(function (e) {
$('html,body').animate( { scrollTop: $('#segunda').offset().top }, 1000, );
});
Nesse momento ainda o tamanho dos elementos está fixo. Em breve faremos com que ele seja definido de acordo com o dispositivo do usuário.
Para fazermos o procedimento para os dois elementos basta adicionar um novo listener agora para o primenro elemento de modo que o scroll tenha como referencia sempre o top do elemento desejado.
$('nav li:nth-child(1)').click(function (e) {
$('html,body').animate( { scrollTop: $('#primeira').offset().top }, 1000, );
});
$('nav li:nth-child(2)').click(function (e) {
$('html,body').animate( { scrollTop: $('#segunda').offset().top }, 1000, );
});
Após essa alteração podemos inserir novos elementos pois a posição de scrollTop terá sempre como referencia seu offset.
Agora para ajustarmos a altura dos elementos no tamanho da tela do usuário podemos definir o CSS através do jQuery, atribuindo o height de acordo com o valor verificado em $(window).height().
var altura = $(window).height();

$('#primeira').css('height', altura);
$('#segunda').css('height', altura);
$('#terceira').css('height', altura);
Do modo como está no entanto a altura não é ajustada automaticamente quando redimensionamos a tela.
Para isso precisamos monitorar o evento .rezize() do objeto window.
Note que os eventos devem sempre executar uma função de callback.
O rotina de definição do height pelo CSS passa a ser executada por uma função qie por sua vez é executada sempre que o evento resize() ocorrer.
$(function (e) {
$(window).resize(function (e) {
redimensionar();
});
Desse modo temos os valores da janela definidos automaticamente.

Curso IV - Unidade 06 - Eventos

Aula 178 - Evento de clique
No jQuery monitoramos os eventos de click com a função .click() ou com a função .on(). No primeiro caso utilizamos uma função de callback para indicar a ação a fazer. Já quando utilizamos a função .on() devemos passar o evento e em seguida a função de callback (a função de cb pode ser apenas a chamada para a função externa, nesse caso sem os '()').
Outro evento que podemos monitorar é o mouseover.
Da mesma forma que a função .on(), podemos utilizar a versão .off() para desativar o evento. Se chamamos a função .off() dentro da função de cb do evento podemos desativá-lo fazendo com que ele só seja executado uma vez.
Podemos criar mais de um evento para um elemento, por exemplo, click e mouseover.
Quando utilizamos a função .off() sem definir um evento ele desativa qualquer evento no elemento após sua chamada.
Aula 179 a 180 - Mostrar e esconder elementos com clique / Mostrar e esconder elementos ao rolar o mouse por cima
Podemos mostrar ou esconder elementos com as funções .show() e .hide(). Desse modo podemos criar funções que sejam executadas no eventos .click() ou .hover()
Aula 181 - Enviar parâmetros para uma função com evento
Quando trabalhamos com eventos podemos criar parâmetros para serem enviados para a função que irá manipular esse evento. Para isso basta criar dentro de chaves '{}' uma par chave: 'valor' com os dados que queremos enviar.
Esses dados podem ser acessados utilizando o parametro .data.nome_do_parametro do evento enviado pela função executada. Podemos passar quantos paratros quisermos para o evento.

Curso IV - Unidade 07 - Animações e efeitos

Aula 182 - Efeitos básicos de animação
Aqui inicialmente utilizei a propriedade .css('display', 'none') para ocultar o objeto, entretanto o jQuery possui funções específicas para isso:
.hide(tempo), .show(tempo) e .toggle(tempo), sendo que a última alterna entre os dois efeitos. O tempo é em milissegundos.
Podemos passar como segundo parâmetro para essas funções uma nova função que executará qualquer ação (no exemplo apresenta um alert com uma mensagem)
Aula 183 - Efeitos de fadeIn, fadeOut, fadeTo e fadeToggle
Da mesma forma que as funções hide, show e toggle temos as funções .fadeIn(), .fadeOut() e .fadeToggle() que faz o efeito de fade nos elementos.
Aula 184 - Efeitos de slideUp, slideDown e slideToggle
Outro conjunto de efeitos do jQuery é o .slideUp(), .slideDown() e .slideToggle()
Aula 185 - Efeitos de animação personalizado
Podemos criar animações com os elementos utilizando a função .animate(). Essa função pode receber como parametros as propriedades CSS de animação do elemento (no exemplo utilizamos { left:300, top:100} e para tanto devemos definir a propriedade position), o tempo de duração da animação, alguns efeitos como linear e swing que controlam a velocidade da animação e podemos passar uma função ao final da animação.
Aula 186 a 188 - Projeto - Criar um Image Rotator - aula 1 / aula 2 / aula 3
Neste exercício vamos fazer um slide de imagens. Para isso temos um conjunto de imagens dentro de uma <div> que tem definida um position: absolute. Aplicamos a essa <div> a função .animate() definindo a posição à esquerda como {left -=200} (o tamanho das imagens é de 200px e como queremos que o movimento seja da direita para a esquerda devemos passar o valor da posição como negativo).
Em seguida para que a função de movimento ocorra de forma automática utilizamos a função setInterval() passando como parametros a função de movimento e o tempo de intervalo.
Para melhorar o posicionamento das imagens (que tem um pequeno espaço entre elas) definimos a flutuação como float: left. Com isso as imagens passam a ficar coladas umas as outras.
Em seguida criamos uma nova <div> que deve envolver a div da animação e que passará a ter o position: absolute.
Aplicamos a essa div a propriedade clip:rect(0 200px 200px 0). Essa propriedade limita o tamanho da área que fica visível na tela.
Com essa nova <div> com a position: absolute a <div> das animações passa a ter o position:relative e é posicionada com o top: 0, left:0 (em relação a nova div). Desse modo temos apenas o quadro de uma imagem sendo apresentado na tela.
Para fazer o movimento cíclico entre as imagens foi realizado um pequeno teste para definir as dimensões do slider.
Para esse teste criamos uma <div> abaixo do slider que apresenta a posição em pixels que está cada uma das imagens. Fizemos isso imprimindo na div o valor momentaneo em cada imagem utilizando o comando abaixo:
$('#info').html($('#janela').position().left);
Ao sabermos a posição de cada imagem podemos definir onde fica a última imagem. A última imagem deve ser a mesma imagem que a primeira pois quando chegamos ao fim do slider apresentamos novamente a primeira imagem e podemos voltar ao início do slider sem que se perceba a mudança das imagens. Para fazer isso criamos um teste lógico como segue:
if ($('#janela').position().left == -800) {
$('#janela').css('left', 0);
}
Ou seja, quando o slider chegar na posição -800 (definido observando o .position().left) a posição do slider é definido novamente como 0 e ele volta a correr para a segunda imagem.
Aula 189 - Projeto - Criar um Image Rotator - aula 4
Aqui vamos fazer com que o código fique dinâmico e reconheça a quantidade de imagens e o tamanho automaticamente.
A primeira coisa a se fazer é inserir a primeira imagem ao fim do slider de forma programática. Para isso utilizamos a função .append() para incluir uma tag img e a função .attr() para definir a propriedade que contém o nome da imagem:
$('#janela').append('<img>');
$('#janela img:last').attr('src', './img/foto1.jpg');
Veja que utilizamos a pseudoclasse last para que seja inserido na última tag de imagem.
Em seguida fizemos a rotina para calcular o tamanho do slider completo para fazer a rotação. Esse cálculo é feito recuperando a quantidade de imagens da <div> que contém as imagens utilizando a propriedade .lenght multiplicado pelo tamanho das imagens recuperado com a função .width() e muntiplicado por '-1' (para que o valor fique negativo).
limite = $('#janela img').length * $('#janela img').width() * -1; Um detalhe que não foi observado é que com o float:left se o número de imagens estourar o limite da tela as imagens descem para a linha de baixo e causam uma quebra no fluxo do slider. Para resolver isso inclui um atributo min-width com o jQuery calculado da mesma forma que o tamanho do slider:
minwidth = $('#janela img').length * $('#janela img').width();
setInterval(moverFotos, 2000);
$('#principal').css('min-width', minwidth + 'px');

Curso IV - Unidade 03 - Fundamentos de jQuery