Escolar Documentos
Profissional Documentos
Cultura Documentos
menu em jQuery
Verso 1.0 de 05/07/2016
AVISO DE RESPONSABILIDADE
A cpia e uso deste material livre inclusive para fins comerciais, desde que o
material no sofra modificaes e seja mantida a referncia ao autor e a empresa
Alfamdia.
07/2016
Alfamdia
Assim sendo, o melhor uso deste material ser com a reproduo dos exemplos e
a prtica dos cdigos, at o aluno adquirir familiaridade com o conteudo.
medida que o mouse se move pelos menus, tanto horizontal quanto vertical, o
item selecionado aparece em uma cor mais escura. Clicando no mesmo, iremos para a
pgina vinculada ao menu:
Este contedo HTML no ter as definies de layout, que vo fazer com que o
menu tenha fundo azul, seja horizontal, etc., nem ter toda a interao vinculada aos
movimentos do mouse. O layout ser mostrado na unidade seguinte, e ser especificado
em outra linguagem, a CSS, enquanto a interao ser feita por nosso programa em
jQuery, e mostrada na ltima unidade.
Observe, a seguir, nosso cdigo HTML. Iremos detalhar cada item do mesmo
abaixo. Se voc j tem um domnio do HTML, possivelmente uma rpida olhada no
cdigo-fonte j ser suficiente para voc seguir para a unidade seguinte. Ou pode
acompanhar as explicaes abaixo como forma de rever seu conhecimento de HTML.
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de Menu com jQuery</title>
</head>
<body>
<nav>
<ul>
<li>
<a href="#">Sobre Ns</a>
</li>
<li>
<a href="#">Nossos Produtos</a>
</li>
<li>
<a href="#">Nossos Servios</a>
</li>
<li>
<a href="#">Nossos Clientes</a>
</li>
</ul>
</nav>
</body>
</html>
Se este seu primeiro contato com HTML, tente escrever o contedo acima em
um arquivo texto, salve com extenso .html, e abra em um browser. Voc dever ver
algo semelhante a imagem a seguir:
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de Menu com jQuery</title>
</head>
<body>
</body>
</html>
Temos dois grupos principais de elementos na nossa pgina, que esto entre as
tags <head> e </head>, e as tags <body> e </body>.
Voc pode inclusive copiar esta estrutura e aplicar em novas pginas HTML, se
est recm comeando a utilizar a linguagem. Basicamente, podemos nos preocupar,
principalmente enquanto ainda no processo de aprendizado do HTML, apenas em
escrever contedos dentro do corpo do HTML.
<nav>
<ul>
<li>
<a href="#">Sobre Ns</a>
</li>
</ul>
</nav>
nav: indica que estamos em um elemento que ser utilizado para navegao.
Ou seja, o que vem a seguir algum tipo de menu ou indce para navegar
por um site.
Observe agora o menu completo. relativamente fcil entender que, agora, nossa
lista tem 4, e no 1 elemento:
<nav>
<ul>
<li>
<a href="#">Sobre Ns</a>
</li>
<li>
<a href="#">Nossos Produtos</a>
</li>
<li>
<a href="#">Nossos Servios</a>
</li>
<li>
<a href="#">Nossos Clientes</a>
</li>
</ul>
</nav>
Por elementos hierrquicos, queremos dizer que temos listas dentro de listas.
Observe a lista a seguir. fcil perceber que temos uma lista principal, com os itens
sobre ns, nossos produtos, etc., e para cada item desta lista principal, temos uma
nova lista vinculada a mesma. Por exemplo, para o item sobre ns da lista principal,
temos uma lista com os elementos quem somos, o que fazemos, e o que
pensamos.
Vamos ver, no exemplo a seguir, como esta hierarquia construida. Basicamente,
dentro de cada li em que temos o texto do respectivo elemento (por exemplo sobre
ns), temos tambm uma nova lista ul com seus respectivos elementos:
<nav>
<ul>
<li>
<a href="#">Sobre Ns</a>
<ul>
<li><a href="#">Quem Somos</a></li>
<li><a href="#">O que Fazemos</a></li>
<li><a href="#">O que Pensamos</a></li>
</ul>
</li>
<li>
<a href="#">Nossos Produtos</a>
<ul>
<li><a href="#">Produto A</a></li>
<li><a href="#">Produto B</a></li>
<li><a href="#">Produto C</a></li>
<li><a href="#">Produto D</a></li>
</ul>
</li>
<li>
<a href="#">Nossos Servios</a>
<ul>
<li><a href="#">Servio Principal</a></li>
<li><a href="#">Outro Servio</a></li>
</ul>
</li>
<li>
<a href="#">Nossos Clientes</a>
<ul>
<li><a href="#">Clientes no Varejo</a></li>
<li><a href="#">Clientes na Indstria</a></li>
<li><a href="#">Clientes Governo</a></li>
<li><a href="#">Depoimentos</a></li>
</ul>
</li>
</ul>
</nav>
Com isso, temos todo nosso menu criado. Obviamente, em um menu real,
teremos que substituir o # dentro do href no elemento a pelo link de cada item do
menu.
3. Criando o Layout de Nosso Menu em CSS
Nesta unidade, vamos trabalhar o layout deste menu, e para isso utilizaremos
outra linguagem, a CSS, ou Cascading Style Sheet, que a linguagem utilizada para
definir a forma como elementos HTML so exibidos.
Inicialmente, faremos uma nica alterao em nosso menu, que colocar todos
os elementos com fundo azul, como o menu final que desejamos. Isto servir para
vermos uma das formas de trabalhar com CSS em uma pgina HTML:
<!DOCTYPE html>
<html>
- <head>
- <title>Exemplo de Menu com jQuery</title>
-
- <style>
- nav ul li {background-color:#0BD;}
-
- </style>
-
-
- </head>
-
-
- <body>
- <nav>
-
- <ul>
- <li>
-
- <a href="#">Sobre Ns</a>
- <ul>
-
- <li><a href="#">Quem Somos</a></li>
- <li><a href="#">O que Fazemos</a></li>
M
I <li><a href="#">O que Pensamos</a></li>
N </ul>
H
A </li>
-------------AQUI SEGUE COM O RESTANTE DA PGINA HTML--------
P
Observe que acrescentamos apenas trs linhas para fazer a alterao da cor do
fundo, resultando neste efeito da imagem a seguir:
O que nos interessa, aqui, e analisar as trs linhas que foram adicionadas em
nossa pgina HTML:
<style>
nav ul li {background-color:#0BD;}
</style>
As tags <style> e </style> definem que o que est entre elas o estilo da
pgina, e est escrito em linguagem CSS, no em linguagem HTML. Vamos ento nos
concentrar neste contedo, para entender exatamente o que ele est fazendo:
Por padro, listas so exibidas de uma forma particular, como mostrado nas
imagens anteriores. No entanto, no queremos que nossa lista seja exibida como uma
lista tpica, pois estamos utilizando os elementos ul e li apenas para estruturar
nosso menu.
Observe como alteramos o CSS para que os elementos da lista sejam exibidos
como inline, e o resultado que isso gera em nossa exibio:
<style>
nav ul li {display:inline;background-color:#0BD;}
</style>
Voc pode observar que, utilizando ; como separador, podemos alterar o valor
de diversos atributos CSS. No caso, alteramos display para inline, com o resultado
conforme mostrado a seguir:
Utilizaremos agora o atributo float com valor de left para fazermos o menu
funcionar na horizontal.
Se utilizamos duas imagens com atributo float como left, temos o efeito
mostrado a seguir:
Utilizaremos o mesmo atributo float com outro objetivo, o de alinharmos os
elementos do menu principal, um ao lado do outro. Observem o cdigo e o efeito
resultante:
<style>
nav ul li {float:left;display:inline;background-color:#0BD;}
</style>
relativamente bvio que ainda temos alguns elementos para ajustar. Por
exemplo, queremos que os menus de segundo nvel sejam verticais, e no horizontais
como os de primeiro nvel. Porm, nosso menu j comea a tomar forma.
Vamos enderear estes dois aspectos do layout com nosso novo comando CSS:
<style>
nav a {text-decoration:none;display:block;padding:10px 10px;}
nav ul li {float:left;display:inline;background-color:#0BD;}
</style>
Observe que nossa nova linha afeta o elemento a. Note tambm que a instruo
CSS utiliza a sequncia nav, a. Com isso, estamos redefinindo os atributos de todos
os elementos a contidos em nosso elemento de navegao, sem afetar o layout do
restante da pgina.
O resultado deste novo conjunto de atributos mostrado a seguir. Note que agora
temos um espaamento maior entre os elementos, que um dos objetivos que
queremos, alm de no existir mais o sinal de sublinhado.
Obs: um observador mais atento pode se perguntar por que os elementos do
submenu no esto um abaixo do outro, j que definimos o display como block.
Isso se deve ao fato de que fizemos a definio de block apenas no elemento a, e
ele est contido no elemento li que esta definido como float de valor left. Assim,
cada elemento li, por seu float: left, est ao lado do outro, e mudanas no elemento
interno a no fazem diferena no alinhamento entre os elementos li.
<style>
nav a {text-decoration:none;display:block;padding:10px 10px;}
nav ul li {float:left;display:inline;background-color:#0BD;}
nav ul li ul {width:170px;}
</style>
Ns apenas defimos uma largura (170 pixels) para as listas (ul) que esto
dentro dos elementos (li) da lista (ul) principal. Notem a sequncia de tags: nav,
ul,li,ul.
Observando a imagem anterior, fcil ver que o segundo item do menu principal
est alinhado a direita dos items do menu secundrio do primeiro item do menu
principal.
Isso nos gera dois problemas. Primeiro, temos uma distncia entre os itens que
talvez seja maior do que gostaramos. Mas, em segundo lugar, se ns deixarmos a
posio do menu principal ser afetada pelo menu secundrio, isso vai resultar que o
menu principal vai mudar a medida que os menus secundrios so mostrados e
apagados. No o que queremos.
Para resolver isso, utilizaremos o atributo CSS que faz com que um elemento no
afete o fluxo dos demais elementos da pgina, o atributo position com valor
absolute. Sempre que um elemento tem position:absolute, isso significa que a
pgina exibida do mesmo jeito, quer aquele elemento exista ou no.
<style>
nav a {text-decoration:none;display:block;padding:10px 10px;}
nav ul li {float:left;display:inline;background-color:#0BD;}
nav ul li ul {position:absolute;width:170px;}
</style>
O lado positivo deste cdigo que agora o alinhamento dos elementos do menu
principal independe dos menus secundrios. Se, por experincia, voc remover o menu
secundrio, o menu principal permanecer inalterado.
<style>
nav a {text-decoration:none;display:block;padding:10px 10px;}
nav ul li {float:left;display:inline;background-color:#0BD;}
nav ul li ul {position:absolute;width:170px;}
nav ul li ul li {width:170px;background-color:#0BD}
</style>
a
l
e
r
t
(
Com a alterao anterior, os elementos da lista secundria (o li do ul de
dentro da lista principal) pararam de ocupar obrigatoriamente todo o espao,
precisamos tambm nestes elementos especificar a largura como 170 pixels.
Se voc nunca trabalhou com CSS antes, provavelmente considerou difcil esta
unidade.
Considere, ento, que se voc conseguiu entender o suficiente para ter uma
percepo razovel de como o CSS funciona e como ele foi utilizado para modelar o
layout da pgina, mesmo que voc no se sinta seguro para criar um layout to
complexo sozinho, estamos no caminho certo.
Queremos que o item no qual o mouse estiver esteja em uma cor diferente
dos demais
<script src="jQuery/jquery-3.0.0.min.js"></script>
<script>
$(function () {
alert(ola mundo);
});
</script>
Este cdigo pode ser colocado dentro do elemento head, ou seja, entre as tags
<head> e </head>, antes ou depois do cdigo CSS.
A primeira linha deste cdigo justamente carrega nossa biblioteca jQuery, para
podermos utiliz-la em nosso programa javascript. De forma muito simplificada,
podemos pensar neste arquivo jquery-3.0.0.min.js como uma coleo de funes j
prontas que utilizaremos em nosso programa. Podemos pensar em programar com
jQuery simplesmente como programar em javascript, fazendo uso de toda uma srie de
funes que algum j criou antes.
Na primeira linha, temos ento <script src=jQuery/jquery-
3.0.0.min.js></script>. Se voc est utilizando esta apostila junto com os cdigos-
fonte, por exemplo como parte do curso de Desenvolvimento Web, esta linha far com
que o programa acesse o arquivo que est no diretrio jQuery.
Se voc est com acesso apenas a esta apostila, pode alterar esta linha para a
linha abaixo, que far com que o jQuery seja trazido da internet:
<script src="https://code.jquery.com/jquery-3.0.0.min.js></script>
Se tudo funcionar, ao acessar a pgina, voc ver uma janela popup com a
mensagem ola mundo. Para isso, utilizamos o comando javascript alert, mas o que
nos interessa neste momento entender o uso que estamos fazendo do jQuery.
$(function () {
//commandos em javascript e jQuery.
});
Esta linha uma forma simplificada de escrever o seguinte comando jQuery:
$(document).ready(function(){
//commandos em javascript e jQuery.
});
Por sua vez, o commando acima est nos dizendo que, quando o documento
estiver pronto, ou seja, quando a pgina HTML tiver sido toda trazida para o
navegador, deve ser executada a funo definida por function() { }.
Assim sendo, ao ser exibido o alerta, sabemos que o jQuery est funcionando,
que o documento foi carregado, e que estamos prontos para substituir o alert pelos
cdigos em javascript e jQuery que permitiro o controle de nosso menu.
Vamos agora entender como funciona a funo hover e como associamos funes
a elementos do HTML. Felizmente, a sintaxe do jQuery para identificar elementos
lembra um pouco o que acabamos de ver como forma do CSS tambm identificar
elementos.
$('nav li').hover()
Para entendermos isso melhor, criamos duas funes que chamam console.log.
Console.log exibe mensagens na tela do console, que no Chrome aberta teclado
F12.
Observe a figura abaixo, com este cdigo aberto no Chrome e a tela de console
sendo exibida:
Vamos agora ver a especificao da funo jQuery de hover, para entender
melhor o que estamos vendo:
Assim, observando nossa funo, o que temos uma funo jQuery associada a
todos os elementos do tipo li includos dentro do elemento nav. Em todos eles,
vinculamos a funo .hover, dois handlers, ou seja, duas funes. A primeira delas
exibe uma mensagem no console (entrou), e a segunda, uma outra mensagem no
console (saiu).
Eis, assim, que temos aqui um primeiro contato com o uso de this em
javascript. O this faz uma referncia a instncia do objeto em que aquela funo est
executando. Em outras palavras, no caso em questo, this vai referenciar exatamente o
elemento li que gerou a chamada do hover.
Assim sendo, o cdigo acima faz com que, sempre que o mouse entrar em um
elemento li de nav, seja atribudo um valor 0AC ao atributo background-color
daquele elemento em particular, e sempre que o mouse sair do elemento, seja atribudo
o valor 0BD.
Como resultado, temos agora que todo elemento li no qual o mouse se encontra
mostrado com um cor mais escura que os demais.
Para abrir e fechar os menus secundrios, vamos utilizar duas funes chamadas
slideDown e slideUp.
Assim, em nosso exemplo utilizaremos 200 milisegundos, mas voc pode alterar
este cdigo para tornar a animao mais lenta ou mais rpida.
$(ul,this)
Ocorre que no queremos tratar do elemento this que recebemos, pois ele se
refere ao elemento li, e ns queremos o elemento ul contido dentro do elemento
li (revisem a unidade 2, em que construmos o HTML original).
jQuery(this).find("ul");
Se voc foi construindo todo o cdigo at aqui, deve ter percebido que restou
apenas um ltimo detalhe. Inicialmente, todos os menus comeam visveis. Isso
facilmente resolvvel alterando um detalhe no CSS, que mostramos em negrito a seguir:
<style>
nav a {text-decoration:none;display:block;padding:10px 10px;}
nav ul li {float:left;display:inline;background-color:#0BD;}
nav ul li ul {display:none;position:absolute;width:170px;}
nav ul li ul li {width:170px;background-color:#0BD}
</style>
O que voc far a partir daqui depender da forma como est utilizando esta
apostila. Se como parte de nossos treinamentos, nossa recomendao revisar os
vdeos, que podem conter mais detalhes sobre o processo de construo do menu,
assistir ou revisar nossos vdeos e apostilas de HTML, CSS, Lgica de Programao e
Javascript, e, se estiver realizando nossas modalidades presenciais, levar ao instrutor
suas dvidas no prximo encontro.
<!DOCTYPE html>
<html>
<head>
<title>Exemplo de Menu com jQuery</title>
<style>
nav a {text-decoration:none;display:block;padding:10px 10px;}
nav ul li {float:left;display:inline;background-color:#0BD;}
nav ul li ul {display:none;position:absolute;width:170px;}
nav ul li ul li {width:170px;background-color:#0BD}
</style>
<script src="https://code.jquery.com/jquery-3.0.0.min.js></script>
<script>
$(function () {
$('nav li').hover(
function () {
$(this).css({"background-color" : "#0AC"});
$('ul', this).slideDown(200);
},
function () {
$(this).css({"background-color" : "#0BD"});
$('ul', this).slideUp(200);
}
);
});
</script>
</head>
<body>
<nav>
<ul>
<li>
<a href="#">Sobre Ns</a>
<ul>
<li><a href="#">Quem Somos</a></li>
<li><a href="#">O que Fazemos</a></li>
<li><a href="#">O que Pensamos</a></li>
</ul>
</li>
<li>
<a href="#">Nossos Produtos</a>
<ul>
<li><a href="#">Produto A</a></li>
<li><a href="#">Produto B</a></li>
<li><a href="#">Produto C</a></li>
<li><a href="#">Produto D</a></li>
</ul>
</li>
<li>
<a href="#">Nossos Servios</a>
<ul>
<li><a href="#">Servio Principal</a></li>
<li><a href="#">Outro Servio</a></li>
</ul>
</li>
<li>
<a href="#">Nossos Clientes</a>
<ul>
<li><a href="#">Clientes no Varejo</a></li>
<li><a href="#">Clientes na Indstria</a></li>
<li><a href="#">Clientes Governo</a></li>
<li><a href="#">Depoimentos</a></li>
</ul>
</li>
</ul>
</nav>
</body>
</html>