
Eccoci qua con una nuova lezione di Jquery.
L’altra volta abbiamo visto degli esempi molto semplici di funzioni jquery, che però ti dovrebbero aver già fatto intuire come sia la struttura di qualsiasi altro script.
Struttura di base
Ricapitolando, abbiamo visto che tutto il codice jquery deve stare all’interno di $(document).ready(function() { … }); per funzionare.
Fatto questo, avremo sempre bisogno di un oggetto da cui partire, come ad esempio: $(”#prova”). Nei casi analizzati, si trattava di un oggetto con un preciso ID o classe, ma non sempre sarà così e quindi ricorreremo a tutta una serie di selettori, che ho intensione di vedere più avanti.
Una volta individuato l’oggetto, abbiamo bisogno di un evento, per proseguire nell’esecuzione della funzione. Anche in questo caso, abbiamo visto solo l’evento .click(), che fa partire una certa funzione nel momento in cui clicchiamo sull’oggetto indicato, ma ce ne saranno altri da prendere in considerazione.
Indicato l’evento scatenante, possiamo passare alla descrizione della funzione vera e propria, quindi ci servirà nuovamente un oggetto su cui lavorare e far partire le animazioni e gli effetti vari che la libreria jQuery ci mette a disposizione. Fin’ora hai visto solo il .fadeIn().
Esempio:
$("#prova").click(function() {
$(".hide").fadeIn();
return false;
});
Questa che ho cercato di tracciare è la struttura che seguiremo nel 90% dei casi:
selettore + evento –> selettore + effetto
Ora non resta altro che vedere il maggior numero possibile di selettori, eventi ed effetti, per riuscire a padroneggiare al meglio questo potente strumento chiamato jQuery.
Animare gli elementi cambiandone dinamicamente lo stile
Per prima cosa dobbiamo definire la struttura HTML e CSS da manipolare.
Codice HTML:
<ul id="animazione">
<li>Segui</li>
<li>i tutorial</li>
<li>di jquery</li>
<li>su</li>
<li>BitTrack.it</li>
</ul>
Codice CSS:
#animazione {
list-style: none;
}
#animazione li {
width: 200px;
padding: 5px;
border: 1px solid #ccc;
background: #eee;
}
Il risultato è questo:
- Segui
- i tutorial
- di jquery
- su
- BitTrack.it
Una semplice lista con ID animazione, contenente elementi di larghezza 200px (210px per i più pignoli
). Vogliamo far sì che, cliccando su un qualsiasi elemento della lista, la sua larghezza raddoppi a 400px con un’animazione.
<script type="text/javascript">
$(document).ready(function(){
$("#animazione li").click(function(){
$(this).animate({width: "400px"}, 1000);
});
});
</script>
Analizziamo il codice passo passo.
Con $(“#animazione li”) indico qualsiasi elemento
Per eseguire un effetto però ho bisogno di un oggetto su cui lavorare e si da il caso che si tratti proprio dell’elemento che ho appena cliccato! Come fare per individuare esattamente quell’elemento della lista piuttosto che un altro? Usando $(this).
Si tratta di un selettore molto utile che, in questo caso, fa riferimento all’oggetto della funzione click().
Cosa sia esattamente this non è semplice da spiegare (almeno per me), è una cosa che si riesce a comprendere a pieno soltanto con l’esperienza.
Per ora ti basta sapere che, una volta fatto click su un elemento della lista, this indicherà esattamente quell’elemento; quindi non resta altro da fare che far partire l’effetto desiderato con animate().
Animate
Animate() è una funzione molto potente che ci permette di manipolare l’oggetto desiderato, cambiandone lo stile per mezzo di animazioni. Quando parlo di stile, intendo lo stesso che usiamo nei css. Per esempio, in questo caso dobbiamo aumentare la larghezza fino a 400px, scriverò:
$(this).animate({width: "400px"});
Come vedi, i parametri dell’animazione (quelli tra parentesi graffe) vengono indicati in modo molto simile alle dichiarazioni del css (fatta eccezione per le virgolette).
Altra cosa da notare, è il fatto che, come ti avevo preannunciato l’altra volta, i parametri di una funzione seguono una loro precisa formattazione.
Nel caso di animate() devi inserire i parametri dell’animazione vera e propria dentro parentesi graffe e se vorrai indicare la durata dell’effetto (come nel nostro caso), dovrai inserirla al di fuori delle parentesi preceduta da una virgola, in questo modo.
$(this).animate({width: "400px"}, 1000);
Questo è ciò che abbiamo ottenuto:
- Segui
- i tutorial
- di jquery
- su
- BitTrack.it
Eseguire la funzione inversa facendo click sullo stesso elemento
L’animazione è riuscita alla grande, ma vediamo di rendere il nostro script più completo, facendo in modo che, cliccando una seconda volta sugli elementi la cui larghezza è aumentata, questi tornino alla situazione di partenza con un’altra animazione.
Anche quì ci sono molte strade, ma la pratica più usata consiste nell’assegnare una classe agli elementi la cui larghezza è stata portata a 400px, dopo di che, se viene fatto nuovamente click su uno di questi elementi, attraverso un controllo, saremo in grado di capire se la larghezza di quel dato elemento sia da aumentare o diminuire, a seconda che quella classe sia presente o no.
Anche in questo caso risulta troppo difficile da spiegare a parole, quindi passiamo ai fatti.
<script type="text/javascript">
$(document).ready(function(){
$("#animazione li").click(function(){
if($(this).hasClass("largo")){
$(this).removeClass("largo").animate({width: "200px"}, 1000);
} else{
$(this).addClass("largo").animate({width: "400px"}, 1000);
}
});
});
</script>
Analizzando il codice: come punto di partenza abbiamo sempre il click su un elemento della lista.
$("#animazione li").click(function(){
//...
});
Dopo di che, se quel preciso elemento possiede la classe largo (nome a caso scelto da me con molta fantasia) e quindi è già lungo 400px, riportalo a 200px e toglili la classe largo.
if( $(this).hasClass("largo") ) {
$(this).removeClass("largo").animate({width: "200px"}, 1000);
}
Altrimenti (cioè se non possiede quella data classe), aumenta la lunghezza a 400px e aggiungigli la classe largo.
else{
$(this).addClass("largo").animate({width: "400px"}, 1000);
}
Ecco il risultato finale:
- Segui
- i tutorial
- di jquery
- su
- BitTrack.it
Mi scuso se sono andato un po’ di fretta in questi ultimi passaggi, nonostante abbia utilizzato funzioni molto utili ed importanti tipo hasClass(), addClass, removeClass, ma il loro significato è talmente intuitivo ed evidente che non mi sembrava il caso di perderci troppo tempo.
Fine
Anche questa “lezione” è finita, spero di riuscire a pubblicare le prossime più velocemente, poichè gli argomenti da trattare su jQuery sono tantissimi, devo solo scegliere l’ordine da seguire. Come al solito, se hai suggerimenti o critiche, i commenti sono a tua disposizione. Alla prossima.








Sottoscrivi il nostro Feed



Lascia un commento Feed dei commenti