View
6.839
Download
3
Category
Preview:
DESCRIPTION
Citation preview
Reinaldo Junior
http://reinaldojunior.net
(ou ao menos ouviu falar?)
Todo mundo construía seus layout com tabelas.
Camadas de conteúdo e apresentação juntas. Pouca flexibilidade, baixa performance e
desorganização. Mas, era bonito e produtivo
Separando a apresentação do conteúdo. Menor footprint Maior rapidez e clareza Maior organização leva à produtividade Acessibilidade (universalidade) Um passo inicial para Web Standards e
Marcação Semântica. Mas nem tudo foi perfeito...
Programação Client-Side, controle dos diferentes navegadores/SO’s e do fluxo de navegação.
Camadas de comportamento e conteúdo juntas.
Imaturidade, baixa confiabilidade, falta de profissionais e ferramentas, diferentes implementações (proprietárias).
Anatomia de um Ogro (ou JS Obtrusivo)
•Não acessível•Destrutivo•Irritante•Assustador•Obtrusivo
Obtrusive“1. Sticking out; protruding. 2. Noticeable;
prominent, especially in a displeasing way. 3. Pushy. ”
Obtrusivo“Um ogro deitado no meio do caminho,
pronto pra criar confusão”
<a href="javascript:abreNoticia(123);">Ler notícia</a>
<a href=“#“ onclick=“abreNoticia(123);”>Ler notícia</a>
<a href=“noticia.php?id=123“ onclick=“abreLink(this.href);”>Ler notícia</a>
“Na história Japonesa, um ninja (忍者, ninja) é um guerreiro, treinado em artes marciais, especializadoem uma varidade de artes de guerra não-ortodoxas. Os métodos utilizados pelos ninjas incluemassassinato, espionagem, furtividade, camuflagem, armas especializadas e um vasta coleção de artesmarciais.”
Wikipédia (http://en.wikipedia.org/wiki/Ninja)
“Os Japoneses desenvolveram as artes Ninja ao extremo, criando assassinos mortais, que podem entrar em qualquer lugar sem serem notados e agir quando menos esperado.”
The Illuminated Lantern (http://www.illuminatedlantern.com/cinema/archives/ninja.php)
Anatomia de um Ninja (ou JS Não-obtrusivo)
•Acessível•Degradativo•Funcional•Belo
Não-Obtrusivo“1. Not noticeable or
blatant; inconspicuous”
“Um ninja que chegasorrateiramente, quaseimperceptível e faz seutrabalho”
Boas práticas e padrões Separar o comportamento do conteúdo Melhorar funcionalidade, não impor Degradação Graciosa AJAX DOM Scripting Cross-Browser Scripting Delegação (e não Manipulação) de Eventos
Temporada de caça aos Ogros
(Jiraya, Tartaruga Ninja, Ninja Gaiden, Sub-zero ou Naruto – você escolhe)
Fornecem facilidades para JS Não-Obtrusivo Possuem geralmente as mesmas
funcionalidades. Abordagens/filosofias/focos diferentes Exemplos: Prototype, MooTools, extjs, YUI,
GWT, Dojo, jQuery, Rico, Spry
Filosofia: “write less, do more” Intuitividade Praticidade Acorrentamento Licensa MIT e GPL Se Microsoft e Nokia podem, porque eu não? Google, Mozilla, IBM, Dell, BBC, Digg,
Amazon, Sourceforge, Wordpress, Drupal...
(chega de papo e vamos ao que interessa!)
jQuery (1.2.6) Firefox Firebug
FirePHP Web Developer Toolbar Opera, Safari e... Internet Explorer
Básicos Hierárquicos Avançados
Filtros
Formulários
Filhos
* elemento .classe #id seletor1, seletor2, seletor3
* {border: 1px solid red}
input {padding: 3px;}
.alinhadoEspecial {margin-left: 50px;}
#menuNavegacao {width: 300px;}
h1, h2, .titulos, #tituloHome {font-family: Tahoma;}
h1#primeiro.discreto { text-transform: lowercase; }
ancestral descendente (dentro de...)
pai > filho (imediatamente dentro de...)
anterior + próximo (imediatamente depois de...)
anterior ~ irmãos (depois de...) – CSS3
#conteudo p {font-family: Arial;}
body > div {margin-left: 200px;}
label + input {border: 1px dotted red;}
h2.discreto ~ a {text-decoration:none;}
:first / :last :eq(índice) / :not(seletor) / :even / :odd :lt(índice) / :gt(indice) [atributo] / [atributo=valor] / [att1][att2]
table:first { border: 1px solid blue; }
table *:not(tr) { padding: 5px; }
table.zebra td:even { background: black; }
#navegacao li:lt(3) { color: blue; }
input[name][type=text] { color: red; }
:input :text / :password / :hidden :button / :submit / :reset :radio / :checkbox :enabled / :disabled :checked / :selected
:input { border: 1px dotted yellow; }
form :radio { margin-left: 5px; }
:checkbox:checked { text-decoration: line-through; }
:nth-child( ... ) :first-child :last-child :only-child
ul li:nth-child(3){text-decoration: overline;}
table tr:first-child { background: yellow; }
tr td:last-child { backgound: red; }
div:only-child { width: auto; }
jQuery
jQuery( seletor, *contexto )
jQuery( html )
jQuery( elementos )
jQuery( callback )
each( callback ) get( *índice )
Métodos de “Traversing” (ou “aproximando-se sorrateiramente”)
Encontrando quem você procura
add( seletor )
not( seletor )
filter( seletor / função )
eq( índice )
hasClass( classe )
is( seletor )
andSelf() / end()
Indo até quem você procura
parent( *seletor ) / parents( *seletor )
children( *seletor )
siblings( *seletor )
prev( *seletor )
next( *seletor )
prevAll( *seletor )
Métodos de “Attributes” (ou “caindo na mão”)
attr( nome, *valor ) / attr( propriedades ) removeAttr( nome ) addClass( classe ) / removeClass (classe ) css( nome, *valor ) / css( propriedades ) height( *valor ) / width( *valor ) html( *valor ) text( *valor ) val( *valor )
Métodos de “Manipulation” (ou “causando um estrago maior”)
append[To]( conteúdo ) prepend[To]( conteúdo ) [insert]after( conteúdo ) [insert]before( conteúdo ) wrap[Inner/All]( html/elemento ) replace[With/All]( conteúdo/seletor ) empty() remove( seletor ) clone( [copiar-eventos] )
Métodos de “Events” (ou “esperando a hora de dar o troco”)
bind( tipo, *dados, função ) unbind( *tipo, *função ) one( tipo, *dados, função ) trigger( tipo, *dados ) triggerHandler( tipo, *dados )
focus( *função ) , blur( *função ) click( *função ), dblclick( *função ) keydown( *função ), keyup( *função ) keypress( *função ) select( *função ) change( *função ) error( *função ) submit( *função )
load( função ), unload( função ) scroll( função ), resize( função ) mousedown( função ), mouseup( função ) mousemove( função ) mouseover( função ), mouseout( função ) hover( entra, sai ) toggle( uma, outra )
Métodos de “Effetcs” (ou “fazendo a mágica acontecer”)
show/hide( *speed,*função ) toggle() slide[Up/Down]( *speed, [*função ) slideToggle( *speed, *função ) fade[In/Out]( *speed, *função ) slideTo ( speed, opacidade, *função )
Métodos de “AJAX” (ou “invocando a irmandade secreta”)
load(url, *dados, *callback) $.post(url, *dados, *callback) $.get(url, *dados, *callback) $.getJSON(url, *dados, *callback) $.getScript(url, *dados, *callback) $.ajax( opções )
Métodos de “Utilities” (ou “tornando as coisas mais fáceis”)
$.each( objeto, callback ) $.extend( alvo, obj1, obj2, ... ) $.unique( array ) $.grep( array, callback, *inverter) $.map( array, callback ) $.inArray( valor, array ) $.isFunction( variável ) $.trim( string )
Extendendo o jQuery (ou “ensinando novos truques a macacos velhos”)
Maneira simplificada de se criar plugins Abordagens
Estender a classe jQuery (métdos ou seletores)
Estender um objeto jQuery
Permite integrar funcionalidades à filosofia jQuery
Métodos
Funções utilitárias
Independentes do Documento (DOM)
jQuery.extend({
min: function(a, b){
return a < b ? a : b;
}
})
Seletores Estendem a abstração
jQuery.extend(jQuery.expr[":"], {
anamed: "a.name==undefined”,
unamed: "a.name==‘’”
});
$(‘*:anamed’) $(‘*:unamed’)
Adiciona funcionalidades que dependam do funcionamento do jQuery
jQuery.fn.extend({check: function() {
this.each(function() { this.checked = true; });},uncheck: function() {
this.each(function() { this.checked = false; });}
});
Proteja seu código Proteja o ambiente Mantenha acorrentável Mantenha intuitivo
O que é isso?
(function() {
//Seu código
})();
Que tal?
function teste() {
//Seu código
};
teste();
Qual o problema?
var externa = 0;
(function(){
externa += 10;
})();
E agora?
var externa = 0;
(function(){
externa += 10;
(function(){
externa += 10;
})();
})();
http://pt.wikipedia.org/wiki/Closure Pode causar erros Pode ser útil (macros, por exemplo)
var eventos = [‘click’, ‘focus’, ‘blur’, ...];
jQuery.each(eventos, function(i, nome){
jQuery.protype[nome] = function(fn){
return this.bind(nome, fn);
};
});
Qual o problema?
var externa = 0;
(function(){
var externa;
externa += 10;
})();
E agora?
var externa = 0;
(function(){
var externa;
externa += 10;
(function(){
externa += 10;
})();
})();
Seu código e o ambiente ficam protegidos
Seu código pode coexistir com outros códigos aleatórios do site
Seu código pode coexistir com outras cópias da sua biblioteca
Seu código pode ser utilizado em outra biblioteca
(function($){
//Suas variáveis locais
//Seu código
})(jQuery);
Lembra?
jQuery.fn.extend({
check: function() {
this.each(function() { this.checked = true; });
},
uncheck: function() {
this.each(function() { this.checked = false;
});
}
});
jQuery.fn.extend({
check: function() {
return this.each(function() {
this.checked = true; });
},
uncheck: function() {
return this.each(function() {
this.checked = false; });
}
});
jQuery UI (ou “porque uma imagem vale mais que mil palavras”)
Draggables Droppables Sortables Selectables Resizables
Accordion Datepicker Dialog Slider Tabs
Blind Clip Drop Explode Fold Puff Slide Scale Size Pulsate Bounce Highlight Shake Transfer
Se eles conseguiram, você também pode...
(Hi-Yaaaaaaaaaaa...)
Reinaldo de Souza Juniorpalestras@reinaldojunior.net
< http://reinaldojunior.net >
Dúvidas? Comentários? Reclamações? Sugestões?Piadinhas sem graça?
O-bri-ga-do
Recommended