No começo da web JavaScript era considerado uma linguagem de programação completamente difÃcil e inútil. Afinal, depois de uma semana estudando a linguagem, o sujeito só conseguia escrever um script que validasse um formulário de contato que muitas vezes dava erro em outros browsers que não o Internet Explorer. Isso acontecia porque tanto o Netscape quanto o Browser azul tinha seus prórpios padrões de implementações de solução para o Javascript que era ainda estava engatinhando como linguagem.
Dessa forma, muitos códigos proprietários solucionavam problemas em determinado browser, que faziam o programador javascript (sim, isso já foi cargo) fazer muita volta para solucionar em outro browser. Isso acarretava em problemas imensos em manutenção. O cliente, em um belo domingo de sol ligava e dizia que o formulário estava “pulando”, muitas vezes acompanhado de um não sei nem o que é browser/navegador: “eu dou dois cliques no Ãcone da internet e entro”. Então lá ia o programador e precisava revisar dois, três códigos que faziam a mesma coisa em navegadores diferentes.
Ainda bem que, assim como o HTML e o CSS, o JavaScript também sofreu sua padronização, facilitando a criação de scripts que facilitam muito a vida do designer, deixando o designer cada vez mais feliz sem precisar consultar um programador. Uma dessas soluções foi a biblioteca jQuery. Uma biblioteca tão simples que designers conseguem fazer ótimos efeitos com apenas algumas linhas de comando.
Vamos a um exemplo/tutorial prático: um menu com submenus. Quando a pessoa clicar no link o submenu deve aparecer, com um efeito de slide.
Para o html usamos uma marcação simples, indicando quem é o menu e quem é o submenu.
<ul class="menu"> <li><a href="#">Item 1</a></li> <li class="itemPai">Item 2</li> <ul class="subMenu"> <li><a href="#">SubItem 1</a></li> <li><a href="#">SubItem 2</a></li> <li><a href="#">SubItem 3</a></li> </ul> <li><a href="#">Item 3</a></li> <li><a href="#">Item 4</a></li> <li><a href="#">Item 5</a></li> </ul>
Para ativar o jQuery você precisa baixá-la do site oficial (é apenas um aquivo js pequenininho) e coloque-a de preferencia na pasta ou em uma subpasta de onde está seu aquivo html, precisamos colocar a seguinte linha (de preferencia entre as tags <head> e </head> ):
<script type="text/javascript" src="pasta/onde/está/a/jquery.js"></script>
Após a inclusão da jQuery podemos usá-la sem problemas. Coloque seu código entre as tags <script> e <script> depois da chamada da jQuery. Tenha em mente que todo o que você vai fazer é chamado pela chave $ e interligamos os comandos com pontos. Então, para chamarmos o elemento que queremos colocar uma ação, no caso clicar, usamos a chave $ e para referenciamos, usamos as mesmas chamadas que usamos para o css.
$('ul.menu li.itemPai')
Agora, linkamos esse objeto com a ação click, ou seja quando a pessoa clicar no link propriamente dito.
$('ul.menu li.itemPai').click()
E passamos para ele uma função que fará nosso efeito de slide.
$('ul.menu li.itemPai').click(function(){
// Aqui virá a função
})
Agora, a função que fará o efeito. Chamamos com a chave $ quem queremos animar e o linkamos com o tipo de animação. Para o efeito de slide (ou seja, encolher e esticar o elemento dando a ilusão de que ele está saindo de trás do outro elemento para baixo) a jQuery tem dois efeitos prontos que são: slideUp que recolhe o elemento e slideDown que expande o elemento. Ainda temos o slideToggle, que recolhe o elemento se estiver expandido ou vice-versa. Então iremos usar slideToggle para este efeito. Também usamos o return false para fazer com que o link não seja executado, retirando o usuario da nossa página.
$('ul.menu li.itemPai').click(function(){
$('.menu .submenu').slideToggle()
return false
})
E voilá, o efeito está pronto. Exceto por um problema… Se você colocar este script antes do seu menu, ele não vai funcionar porque você esta referenciando um elemento que ainda não existe para o navegador, logo ele não pode referenciar ninguém. Uma solução seria colocar o seu script após o seu código html, mas isso vai contra uma das práticas de tableless que é trabalhar com camadas e, assim como o CSS, não é interessante deixar ele entre o código html por n razões. A outra solução faz parte do escopo do jQuery que faz com que seu script só rode após o carregamento completo do seu código html. Para isso basta criar uma função que englobe seu script dentro da chave $. Ficando assim:
$(function(){
$('ul.menu li.itemPai').click(function(){
$('.menu .submenu').slideToggle()
return false
})
})
Isto resolve nosso problema. Agora, precisamos esconder nosso submenu quando a página carregar. Fazemos isso via javascript e não via css porque não queremos que o menu fique invisivel para pessoas que não usam javascript. Para isso, a jQuery tem a função hide que esconde um elemento (display:none). Se você quiser fazer o contrario, basta usar show no lugar de hide.
<script type="text/javascript">
$(function(){
$('.menu .submenu').hide()
$('ul.menu li.itemPai').click(function(){
$('.menu li .submenu').slideToggle()
return false
})
})
</script>
E esse é o nosso script final que pode ser visto aqui e aqui com aplicação de CSS básico. O interessante da jQuery é que ela é bem inuitiva e tem muitas coisas que já vem no escopo dela que resolvem muitos problemas que os designers querem desenvolver, mas não querem que um programador faça por ser uma coisa tão simples de fazer. jQuery é a parte da programação que os designers sentiam falta e muitas vezes contornavam com um arquivo flash que destruia a semantica de área como o menu que acabamos de construir.
57 Comentários
57 Comentários
Bruno Rocha 05/08/2008 Ã s 11:34
A Jquery realmente mudou minha vida!
(sem exageros).
Eu realmente consegui mais produtividade nos projetos,
mas este post poderia se chamar:
“como desaprender Java Script”
eu me tornei dependente da Jquery, não consigo mais escrever funções em Java Script , é automático, eu simpleemente já penso na sintaxe da Jquery.
Muito bom e realmente produtivo, mas é preciso tomar cuidado para não se tornar dependente destes frameworks.
Fernanda 05/08/2008 Ã s 11:44
Olá!
Só uma coisa. Por navegação TAB o item2 passa batido no exemplo. Isso torna o menu inacessivel em alguns aspectos.
Valdinei dos Santos 05/08/2008 Ã s 12:01
Testei aqui no Firefox e no Opera a página de exemplo que vc disponibilizou e não funcionou em nenhum dos dois.
Felipe Mafra 05/08/2008 Ã s 12:06
Poxa, muito bom! Eu nunca me arrisquei com muitos javascript por achar que era complicado e deixava tudo pro programador. Agora vou me aventurar mais. Esse post foi o pontapé que faltava
Mas é como a Fernanda disse, a navegação por TAB não funciona. Tem um jeito de contornar isso?
Yuri Goytacaz 05/08/2008 Ã s 12:07
falta um na , pois tá dentro de outra , corrigindo:
Item 1
Item 2
SubItem 1
SubItem 2
SubItem 3
Item 3
Item 4
Item 5
Yuri Goytacaz 05/08/2008 Ã s 12:08
Rogério 05/08/2008 às 12:15
aaaaaaaa, foi mal. Era pra clicar no unico que nao era link. Intuitivo…
Ricardo 05/08/2008 Ã s 12:20
na minha opiniao o certo seria “jQuery TAMBÉM é para designers”
concordo que pros designers ela ajuda pakas com essa parte visual, mas a parte de backend e sistemas mais complexos só um programador avançado faz, e bem feito
abs
Isacc Araújo 05/08/2008 às 12:25
Ótimo artigo. Só uma correção a ser feita: a ul.subMenu deve ficar dentro da li.itemPai, assim:
Item 1
Item 2
SubItem 1
SubItem 2
SubItem 3
Item 3
Item 4
Item 5
Yuri Goytacaz 05/08/2008 Ã s 12:31
a ul com classe subMenu precisa estar dentro duma li também.
era isso.
Isacc Araújo 05/08/2008 às 12:31
Ótimo artigo. Só uma correção a ser feita: a ul.subMenu deve ficar dentro da li.itemPai, assim:
<ul class=”menu”>
<li><a href=”#”>Item 1</a></li>
<li class=”itemPai”>Item 2
<ul class=”subMenu”>
<li><a href=”#”>SubItem 1</a></li>
<li><a href=”#”>SubItem 2</a></li>
<li><a href=”#”>SubItem 3</a></li>
</ul>
</li>
<li><a href=”#”>Item 3</a></li>
<li><a href=”#”>Item 4</a></li>
<li><a href=”#”>Item 5</a></li>
</ul>
Eughenio Constantino 05/08/2008 Ã s 12:35
Sim, essas bibliotecas são bem legais, mas vou indicar outra: PROTOTYPE.
Essa sim é bem completa, e muito, muito mais solida que a jQuery, utilizo bastante as duas, mas a Prototype é uma maravilha, agora, há o Scriptaculous, uma biblioteca só de efeitos que trabalha junto com a Prototype, tem de tudo e dá pra fazer tudo, ajax com efeitos são simples de ser feito e quem já conhece javascript terá controle de tudo que a biblioteca faz.
Experimentem.
Matheus 05/08/2008 Ã s 13:47
Muito bom mesmo este artigo.
Como o Felipe disse, eu tbm nunca me arrisquei em js, agora com esse artigo, vou me aventurar mais.
Valeuzão.
Paulo de Tarso F. M. 05/08/2008 Ã s 14:08
Muito bom artigo.
Mas queria alertar sobre um bug que há na versão sem CSS no IE7. Tudo bem, hoje em dia quase impossÃvel alguém querer utilizar um menu assim, crú, né? mas é só para registrar: quando clicamos no Item 2, beleza, o efeito ocorre e tals, bonitinho. Mas ao encolher o submenu, ele sofre um deslocamento para a direita.
Como falei, não sei até onde devemos nos preocupar com isso, mas se de repente alguém perceber uma suposta quebra de layout, por exemplo, já sabe onde atacar primeiro.
Um grande abraço!
Juarez P. A. Filho 05/08/2008 Ã s 14:14
Eu tenho usado/aprendido jQuey com muita frequência nos meus últimos projetos e realmente sua facilidade é de encher os olhos.
Bom tutorial para mostrar para os Designers de plantão que eles podem fazer mais com os recursos disponÃveis hoje.
@Fernanda e @Felipe Provavelmente no exemplo o autor não estava preocupado com esse quesito, porém basta colocar o item2 dentro da tag e pronto, já fica acessÃvel via teclado… O CSS para deixar bonito é com vocês. =D
Juarez P. A. Filho 05/08/2008 Ã s 14:22
Oops… Desculpem por não ter colocado assim: tag <a>
Abraços.
Gabriel Gilini 05/08/2008 Ã s 14:40
Juarez, acontece que mesmo com a âncora no item 2, o menu não será expandido quando o usuário pressionar a tecla enter, ou espaço. A minha solução seria a inserção de um evento onfocus no item falado, assim quando o “tab” passasse por ele, o menu seria expandido como no click.
Marcelo Cajueiro 05/08/2008 Ã s 15:34
Muito bom o tutorial, confesso que eu pensava que era mais complexo.
Abraços.
Julio Vedovatto 05/08/2008 Ã s 17:58
Sugiro somente a troca do tÃtulo do artigo, do jeito que foi feito, ofende em minha opinião, pois uso jQuery e não sou designer. :B
jQuery é uma ferramenta facilitadora de programação, tem uma parte muito boa de UI, mas ela não fica só nisto como você deu a entender no artigo. Tem um ótimo controle em Ajax, manipulação de eventos, de DOM, etc.
Sugiro o tÃtulo algo como: JQuery como facilitador de programação
[]’s
Joana 05/08/2008 Ã s 20:23
Mais ou menos como o colega acima, eu nunca tive muita coragem de ler artigos sobre jquery, mas esse me mostrou de uma maneira simples como é simples!
obrigada!
hospedagem de sites 05/08/2008 Ã s 20:42
num futuro próximo que sabe tudo mude, inventem outra linguagem e o java se esquece…
Seyfertt 05/08/2008 Ã s 21:46
Muito interessante, eu desde alguns meses atrás estava a olhar esse jQuery. Espero que este post incentive outros designers assim como eu.
Guilherme Rambo 05/08/2008 Ã s 22:46
jQuery é realmente para designers
Se alguém tiver interesse, eu estou publicando uns screencasts de jQuery lá no blog: http://www.screencaster.com.br/jquery-criando-menu-em-arvore-e-menu-accordeon/
[Artigo]: Diogo Eis me decepcionou « Julio Vedovatto 06/08/2008 Ã s 02:52
[...] [Artigo]: Diogo Eis me decepcionou Publicado 06/08/2008 Artigos Tags: diego eis, jQuery, tableless Estava na minha leitura diária de feeds, quando me deparo com um post vindo do Tableless que me deixou revoltado, o post se chama: jQuery é para designers. [...]
Felipe Magalhães 06/08/2008 às 10:03
Já cheguei a correr atrás de jQ um pouco, mas uma coisa me intriga: IDE.
Existe alguma q realmente minimize o tempo de desenvolvimento/aprendizado com jQ? (afinal, estamos falando de uma nova maneira de se trabalhar js, com funções novas, e nem sempre há disponibilidade de tempo para para e se dedicar somente ao aprendizado disto. Uma IDE auxiliaria bastante no aprendizado e no desenvolvimento disso)
abraço
obs.: sou programador (asp/cf) hehehe
Igor 06/08/2008 Ã s 10:30
Realmente os framworks de JavaScript ajudam, e muito!
Testei vários, inclusive o jQuery, mas preferi ficar com o MooTools.(que é um pouco menos famoso)
Muito bom o artigo!
Neto 06/08/2008 Ã s 10:34
Bom post, além de ajudar a galera do “design” acho que o JQuery (e qualquer outro framework) ajuda muito mais os programadores com uma visão um pouco mais para frente em determinados projetos.
Julio César Bitencourt 06/08/2008 às 11:20
Fiz uma pequena alteração para inclusão de um segundo sub menu.
O script:
$(function(){
$(’.menu .subMenu’).hide()
$(’ul.menu li.itemPai’).click(function(){
$(this).children(’ul’).slideToggle()
return false
})
})
O xhtml:
Item 1
Item 2
SubItem 1
SubItem 2
SubItem 3
Item 3
SubItem 1
SubItem 2
SubItem 3
Item 4
Item 5
Felipe Jacob 06/08/2008 Ã s 11:23
É muito legal mesmo. Eu já usei, mas no meu caso nem sempre vale a pena.
Recomendo visitar também:
http://www.webdesignerwall.com/tutorials/jquery-tutorials-for-designers/
Abraços!
Gabriel Gilini 06/08/2008 Ã s 13:21
@Felipe Magalhães
Com certeza o tempo de aprendizado é recuperado na melhora da produtividade rapidinho, gaste algumas horas para aprender que vale a pena.
Mas não se limite ao jQ, ele é muito bom, mas temos outras grandes opções como os já citados Prototype e MooTools, além do dojo que é super completo.
@Eughenio Constantino
Me diga porque você acha prototype mais sólida que jQuery. Eu já usei prototype por um bom tempo, e agora, geralmente, uso jQ em meus projetos. E posso afirmar com toda a certeza que não deve em nada para o prototype, inclusive é mais produtivo.
JunioR 06/08/2008 Ã s 15:53
Aproveitando o post, o jquery tem uma comunidade brasil. jquerybrasil.com
[s]
JunioR
brasilportais 07/08/2008 Ã s 17:02
Verifiquei algumas funcionalidades do Jquery mais
ficarei mesmo com Java script, já estou familiarizado.
Bruno Rocha 07/08/2008 Ã s 18:54
Eu estou terminando uma classe C# que permite progranar Jquery no Visual Studio.NET 2008
pra quem usa aspx é uma mão na roda, JQuery com o Mouse!
Rafael Zamana 08/08/2008 Ã s 11:44
Fala fio…
Primeiro post e ainda por cima com erro
Valeu a dica
e se cuida
ATer 08/08/2008 Ã s 21:09
poxa fui dar uma olhada e econtrei umas coisas legais mesmo.. vou colcoar a usar…
Diego 13/08/2008 Ã s 10:07
A tendencia é esta mesmo, facilitar cada vez mais a vida dos designers, mas acho que sempre havera espaço para o programador tambem.
Abraços
http://www.sapoloko.com/
Nome do Jogo » Artigo » Rails Podcast Brasil - Episódio 27 14/08/2008 Ã s 12:12
[...] jQuery é bom para designers [...]
Christian 16/08/2008 Ã s 23:25
Eu concordo com o rapaz ali que falou sobre a Prototype ser mais madura; já me deparei com algumas coisas da jQuery que não funcionam em em browser especÃfico, por exemplo, enquanto nunca me deparei na Prototype (uso ela há 3 anos em quase todos os projetos) com algo que não fosse 100% crossbrowser.
E não gosto também de que na jQuery ao pegar objetos usando o $ ele não retornar objetos DOM.
Mas, tem uma coisa da jQuery que é muito bacana: os plugins. Muito fácil de fazer plugins, uma grande quantidade deles feitos pela comunidade. Nisso, ela é disparada melhor.
Sérgio Michels 17/08/2008 às 14:40
Pelo menos para mim, a JQuery foi bem mais funcional e agilizou meu processo de desenvolvimento.
Além disso, a comunidade e os plugins fazem a diferença.
A documentação é outro ponto forte da JQuery, pois nem todas as pessoas possuem facilidade em aprender a sintaxe.
Alexandre 17/08/2008 Ã s 22:08
Tento não pensar assim: isso é bom para isso, e aquilo somente para aquilo.
Uso Corel e Inskape…
Depende aonde e o que fazer…
Leonardo Sánchez 17/08/2008 às 22:46
Só para constar… para deixar o item 2 acessÃvel pela tecla TAB deve-se adicionar um link (href), vazio… no exemplo citado o item não é acessado pq ele está sendo reconhecido somente como texto
Mootools vs. jQuery » JulioGreff 18/08/2008 Ã s 09:15
[...] preferem jQuery. Não é à toa, ela é extremamente simples de ser usada. Nunca ouviu dizer que jQuery é para designers? Isso também não significa que usuários mais experientes ou experts na linguagem não irão [...]
jQuery é bom para designers | Canal da Tecnologia 18/08/2008 às 15:07
[...] No começo da web JavaScript era considerado… Leia mais [...]
Andre 18/08/2008 Ã s 15:56
Por enquanto estou usando o Mootools, mas me parece que o jQuery é melhor… Assim que achar um framework ideal vou fazer um uma classe que gera menus dinamicos de camadas infinitas e com suporte à usabilidade. A idéia é fazer os botoes -> -< abrirem os menus!
Eughenio Constantino 18/08/2008 Ã s 16:34
A Prototype é mais madura. Não sei se é a mais antiga, em ajax é a que tem o maior controle de tudo, você controla até se o usuário tiver algum problema de conexão e como o Christian falou 100% crossbrowser. Plugins, eu não posso falar nada pois nunca usei e precisei, tudo que precisei o prototype tinha. Até os efeitos o scriptaculous dá conta do recado.
Bom, até o momento eu tenho o prototype tatuado no meu braço(dando uma de zune guy, rs).
Abraços.
junior neo 04/09/2008 Ã s 14:16
Muito bom esse artigo
vlw
Gustavo Bordoni 04/09/2008 Ã s 22:46
Acho que de todas a Jquery é o que vem crescendo mais rápido, eu tenho usado o Jquery em muito de meus projetos, e agora vou me atualizar, usando também o Prototype e o Mootools, que são outras duas frameworks muito interessantes.
Mas já me aventurei, nas duas e a que tive melhor redimento e leveza foi no Jquery.
Kandrad 08/09/2008 Ã s 16:44
Banaca este JQuery, simples e fácil de usar. Uma pergunta. E se eu quiser implementar um menu com vário nÃveis, este menu teverá ter um controle capaz de perceber quando o menu esta na parte inferior da tela caso esteja deverá abrir o sub-menu para cima(para não ter que rolar a tela). Por exemplo suponhamos que o menu esteja na vertical do lado direito da tela.
Exeste alguma função que faça este controle?
WordPress Blog » Blog Archive » Mootools vs. jQuery 05/10/2008 Ã s 12:42
[...] preferem jQuery. Não é à toa, ela é extremamente simples de ser usada. Nunca ouviu dizer que jQuery é para designers? Isso também não significa que usuários mais experientes ou experts na linguagem não irão [...]
Mudança 18/10/2008 às 14:58
Legal
so que queria um que ao passar o mouse aparecesse um submenu!
7 coisas que todo desenvolvedor web deveria saber » JulioGreff.net 06/11/2008 Ã s 15:22
[...] Além da própria linguagem, aprenda a usar alguma biblioteca, como Mootools, jQuery ou Prototype. Aliado a essas ferramentas, você poderá criar aplicações muito mais interessantes em muito menos tempo. Mas atenção: não aprenda somente a biblioteca, sem aprender antes JavaScript puro. Afinal, saber só jQuery é coisa de designer. [...]
Djjin 09/12/2008 Ã s 17:13
Aqui não funcionou lol
mas fazer o que, no fim, é tudo javascript, facil de fazer, só ter paciência (:
mas eu concordo, acho mais fácil pegar um pronto e me habituar a usar comandos prontos, afinal o cara que fez é o único que sabe, na vida é assim, quem sabe faz, quem num sabe copia ^^
uheAOIEUI (:
Transportadora 26/01/2009 Ã s 18:06
Interessante ahsiuahsiuas
Vou aderir ao meu site!
Marcio Rocha 28/02/2009 Ã s 11:19
Afinal, saber só jQuery é coisa de designer. [...]
Assim como saber programar e nada de design centrado no usuário é coisa de programador. Dá pra fazer uma relação interessante entre o designer e o programador e entre o engenheiro e o arquiteto.
O engenheiro, assim como o programador, está interessado na maneira e nos materiais com que se constróem a projeto, já o designer e o arquiteto estão interessados na relação do homem como a casa ou com o site, ou seja, preocupados com a interação humana em ambos os casos. Um é mais importante que o outro, não creio. São complementares e igualmente importantes. Mas tecnologia é assim, ela é boa quando não aparece. Quando ela se integra ao projeto e usufruimos de seus benefÃcios, silenciosamente, quase sem percebê-la. Na maioria das vezes que a percebemos, é quando ela falha.
Rafael Librenz 05/04/2009 Ã s 15:14
Michael, só tem um problema:
XHTML Strict não permite ul dentro de ul. Pelo menos foi isso que eu entendi dos erros que o validador da W3C citou quando tentei validar o HTML do link de exemplo.
Rafael Librenz 05/04/2009 Ã s 16:09
Já descobri o problema!
A ul que vai ganhar display:none via jQuery tem que ficar dentro da li que ativa ela, assim:
‹ul class=”menu”›
‹li›‹a href=”#”›Item 1‹/a›‹/li›
‹li class=”itemPai”›Item 2
‹ul class=”subMenu”›
‹li›‹a href=”#”›SubItem 1‹/a›‹/li›
‹li›‹a href=”#”›SubItem 2‹/a›‹/li›
‹li›‹a href=”#”›SubItem 3‹/a›‹/li›
‹/ul›‹/li›
‹li›‹a href=”#”›Item 3‹/a›‹/li›
‹li›‹a href=”#”›Item 4‹/a›‹/li›
‹li›‹a href=”#”›Item 5‹/a›‹/li›
‹/ul›
(espero que esse código apareça direito nos comentários)
Com isso consegui validar o HTML e ainda me solucionou o problema que eu estava tendo depois que troquei o click da jQuery por hover (os itens da ul que surgia sumiam assim que eu tentava colocar o mouse em cima deles).
Jadiel Almeida.com 06/04/2009 Ã s 14:30
Olá muito boa materia, tenho um theme do wp que usa o JQuery, mas as funções nao estao ativa, existe algum arquivo que precisa ser upado no servidor para a função do jquery funcionar?
Grato