Guida jQuery UI

Transcript

Guida jQuery UI
Guida jQuery UI
di: Marco Solazzi
1. Introduzione
Gli obiettivi del progetto; come e dove scaricare jQuery UI
Effetti
2. Animazioni
Animare l'interfaccia attraverso la modifica del colore e delle classi applicate agli elementi
3. Il metodo effect()
Creare effetti avanzati con questo metodo specifico di jQuery UI
Interazioni
4. Generalità
Le interazioni in jQuery UI: sintassi comune
5. Draggable (trascinare oggetti)
Metodi e opzioni per trascinare oggetti sulla pagina
6. Droppable (rilasciare oggetti trascinati)
Come e dove posizionare sulla pagina oggetti trascinati con draggable
7. Resizable (ridimensionare finestre ed elementi)
Ridimensionare facilmente elementi dell'interfaccia a partire dalle finestre modali
8. Selectable (selezionare oggetti)
Selezione multipla con rettangolo o di oggetti non contigui
9. Sortable (ordinare elementi)
Ordinare interattivamente elementi di una lista
Widget
10. Introduzione ai widget di jQuery UI
Cosa sono i widget e quando usarli
11. Accordion
Nascondere e mostrare elementi in base all'interazione dell'utente
12. Datepicker
Analisi del widget di jQuery UI destinato alla selezione delle date
13. Dialog
Creare e gestire finestre popup, avvisi e messaggi di dialogo
14. Progressbar
Il widget per comunicare all'utente il progresso di un'operazione in corso
15. Slider
Creare e gestire controlli per la modifica 'a scorrimento' di valori
16. Tabs: opzioni
Creare box e pannelli con interfaccia 'a schede'
17. Tabs: eventi e metodi
Eventi e metodi per gestire al meglio il widget tab
18. Themeroller e i temi di jQuery UI
Personalizzare facilmente i temi di jQuery UI
Introduzione (versione per la stampa) | Guide JavaScript | Javascript....
1 di 2
http://javascript.html.it/guide/stampa_lezione/4476/introduzione/
Introduzione
Il web e le interfacce utente
La User Experience (UX) e lo studio delle User Interface (UI) sono oggetto di studio nel campo dello sviluppo
software da molti anni, tanto che tutte le aziende produttrici di sistemi operativi hanno sempre speso molte
risorse nella realizzazione e ottimizzazione di linee guida per la creazione di controlli per l'interazione
applicazione - utente.
Nel web il campo di studi relativo alle interfacce utente è invece stato limitato dalle scarse risorse di interattività
offerte dai linguaggi web che fino a poco tempo fa erano rappresentate da link e form.
Negli ultimi anni, soprattutto grazie al rinnovamento dei motori di rendering JavaScript e a nuove risorse per i
CSS e non ultimo per l'HTML, è stato possibile sperimentare nuove vie di interazione, applicando e spesso
riadattando i controlli utilizzati in ambiente software alle pagine web.
L'esigenza in questo caso è stata fin da subito quella di rendere l'ambiente del web il più possibile simile a quello
più diffusamente conosciuto dei programmi desktop, applicando pattern come quello delle finestre modali, dei
calendari dinamici e dell'aggiornamento dei dati in tempo reale senza bisogno di refresh.
JavaScript e AJAX sono i principali protagonisti di questa rivoluzione negli usi e costumi delle interfacce
internet, anche grazie all'introduzione di framework e librerie di supporto per gli sviluppatori.
jQuery UI
In questa guida parleremo dell'attuale progetto ufficiale per la realizzazione di interfacce utente di jQuery
(http://javascript.html.it/guide/leggi/168/guida-jquery/), chiamato jQuery UI (http://jqueryui.com/).
Il progetto, nonostante alcuni gravi problemi di compatibilità e stabilità delle prime versioni, ha raggiunto ormai
una buona maturità ed un'architettura estendibile che lo rendono un ottimo punto di partenza per tutti gli
sviluppatori che vogliano dedicarsi alla realizzazione di una moderna applicazione per il web.
Partito come un progetto parallelo a jQuery, UI è stato ben presto inglobato nello sviluppo della libreria, pur
mantenendo un gruppo di sviluppo autonomo ancor oggi guidato da Paul Bakaus, il primo sviluppatore del
progetto. Arrivato alla prima versione stabile nel tardo 2007, ha subito numerose revisioni e riscritture fino
all'attuale versione 1.7. Un'altro contributo importante al progetto viene da Filament Group
(http://www.filamentgroup.com/), l'azienda alla base della struttura grafica dei controlli (o widget) e della loro
architettura a temi (che vedremo in una lezione successiva).
Al momento jQuery UI è suddivisa in 3 macroaree di interesse:
effetti grafici (in aggiunta a quelli di jQuery);
interazioni complesse (ordinamento di elementi, drag and drop, etc);
widget (controlli complessi come calendari, finestre modali e navigazione a schede).
jQuery UI: come, dove, quando
Poiché la struttura della libreria è estremamente modulare, sul sito del progetto è disponibile sia un download
completo (http://jqueryui.com/download/jquery-ui-1.7.2.custom.zip) di tutto il codice (sia sorgente che
compresso per la produzione), sia un builder, con il quale ognuno può realizzare una versione personalizzata
della libreria e del tema per i controlli in modo da scaricare solo ciò che serve all'applicazione:
http://jqueryui.com/download (http://jqueryui.com/download).
In generale, quest'ultima opzione è utile una volta concluso il progetto e definiti gli effetti ed i controlli di cui
14/06/2012 00:12
Introduzione (versione per la stampa) | Guide JavaScript | Javascript....
2 di 2
http://javascript.html.it/guide/stampa_lezione/4476/introduzione/
abbiamo veramente bisogno in modo da alleggerire il peso dell'applicazione.
Pronti, partenza...
La versione di UI che useremo negli esempi è la 1.7.2 nel formato "completo" che si basa su jQuery 1.3 e
versioni successive.
In ogni caso, tutti i pacchetti scaricati dal sito sono installabili molto semplicemente.
Decomprimete il file scaricato. Troverete tre cartelle: css (contenente il tema dei controlli (nel nostro caso
smothness), js (con i file compressi di jQuery e jQuery UI) e development-bundle (con tutti i sorgenti ed i file
dei singoli moduli della libreria).
inserite questo codice nella sezione della pagina in cui userete jQuery UI:
<link type="text/css" href="css/smoothness/jquery-ui-1.7.2.custom.css" rel="Stylesheet" />
<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.7.2.custom.min.js"></script>
Nel caso abbiate già inserito un tag per richiamare jQuery, potete omettere la seconda riga. Fate attenzione,
comunque, che la versione 1.7.2 di jQuery UI richiede jQuery 1.3.2.
Vedremo più avanti come poter caricare altri temi e personalizzarli. Al momento iniziamo a scoprire cosa ci offre
jQuery UI a partire dagli effetti grafici.
Per la natura stessa della guida, infine, vi consigliamo di abbinare la sua lettura a quella della Guida jQuery
(http://javascript.html.it/guide/leggi/168/guida-jquery/) per cogliere al meglio le specificità del progetto e i
modi in cui completa l'offerta del framework principale.
Versione originale: http://javascript.html.it/guide/lezione/4476/introduzione/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:12
Animazioni (versione per la stampa) | Guide JavaScript | Javascript....
1 di 2
http://javascript.html.it/guide/stampa_lezione/4477/animazioni/
Animazioni
Molto spesso gli sviluppatori sono portati ad utilizzare gli effetti grafici come "contorno ludico" alla vera e propria
interazione con l'utente. La diretta conseguenza di questo atteggiamento, è che spesso ci troviamo di fronte a
pagine piene di inutili animazioni che ricordano molto dei giochi in Flash o le vecchie pagine anni '90 farcite di
gif animate.
In realtà, le animazioni sono uno strumento fondamentale per catturare l'attenzione dell'utente, creare
relazioni fra gli elementi dell'interfaccia e creare un'interazione più fluida con i visitatori.
In jQuery UI l'approccio usato dagli sviluppatori è stato quello di implementare gli effetti grafici soprattutto
come estensioni dei metodi già presenti nella libreria di base.
Animazioni sul colore
La libreria estende anzitutto le capacità del metodo .animate() nativo, introducendo le transizioni di colore che
permettono di sostituire un colore con un altro con un effetto graduale.
Le proprietà CSS che supportano questo effetto sono: backgroundColor, borderBottomColor,
borderLeftColor, borderRightColor, borderTopColor, color, outlineColor. L'animazione eseguirà una
transizione dal colore attuale ad uno impostato in formato esadecimale, rgb o stringa (ad esempio "red",
esempio (http://www.html.it/guide/esempi/jqueryui/esempi/02-effetti-01.html)).
//CSS
.error { background-color: #F00; color:#FFF; }
//JS
$("#box").text("Errore!").addClass("error",1000);
Animazioni "di classe"
Seguendo l'approccio ad estensione, UI aggiunge nuove caratteristiche ai metodi per la manipolazione delle
classi CSS. Così, passando un numero in millsecondi come secondo parametro di .addClass(), le proprietà CSS
definite nella classe saranno applicate con una transizione della durata indicata:
$("#box").text("Errore!").addClass("error",1000,"linear",function () {
alert("Errore Notificato!");
});
L'introduzione di questa particolare tipologia di effetti è molto importante, in quanto permette di separare la
parte di scripting da quella grafica, semplificando futuri adattamenti grafici o addirittura l'adozione di diversi
stili grafici pur mantenendo inalterato il codice JavaScript. Oltre al parametro della durata, il metodo
.addClass() accetta altri due argomenti opzionali indicanti l'andamento (easing) dell'animazione ed una
funzione da lanciare alla sua conclusione (callback).
$("#box").switchClass('classeCorrente','nuovaClasse',500,'easeOutBounce',function(){
alert("Animazione conclusa!");
});
Ecco un esempio live (http://www.html.it/guide/esempi/jqueryui/esempi/02-effetti-02.html).
14/06/2012 00:12
Animazioni (versione per la stampa) | Guide JavaScript | Javascript....
2 di 2
http://javascript.html.it/guide/stampa_lezione/4477/animazioni/
Altri metodi coinvolti nell'estensione sono .removeClass() e.toggleClass(); ambedue accettano i tre
argomenti come .addClass().
Per concludere è stato aggiunto un quarto metodo, .switchClass(), che permette di animare un'elemento a
partire da una classe applicandogli le proprietà di una seconda. Nell'ordine gli argomenti sono: classe
iniziale, classe finale, durata, andamento (opzionale) e funzione conclusiva (opzionale):
$("#box").switchClass('classeCorrente','nuovaClasse',500,'easeOutBounce',function(){
alert("Animazione conclusa!");
});
Easing avanzato
Il terzo campo nel quale UI estende jQuery è il numero di andamenti, in inglese easing, disponibili.
Nato come plugin per jQuery, questo specifico codice JavaScript permette di modificare la dinamica con cui si
svolge l'animazione, simulando effetti elastici o di attrito al fine di rendere più realistica l'animazione.
Potete trovare la lista di tutti gli andamenti disponibili sulla home page del progetto (http://gsgd.co.uk/sandbox
/jquery/easing/).
Versione originale: http://javascript.html.it/guide/lezione/4477/animazioni/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:12
Il metodo effect() (versione per la stampa) | Guide JavaScript | Javascri...
1 di 1
http://javascript.html.it/guide/stampa_lezione/4478/il-metodo-effect/
Il metodo effect()
L'unico nuovo metodo introdotto dalla libreria è .effect(). Nella sua forma più semplice accetta un primo
argomento stringa che rappresenta il tipo di effetto che vogliamo applicare alla collezione: 'blind', 'bounce',
'clip', 'drop', 'explode', 'fold', 'highlight', 'puff', 'pulsate', 'scale', 'shake', 'size', 'slide',
'transfer'. Ecco un esempio pratico (http://www.html.it/guide/esempi/jqueryui/esempi/02-effetti-03.html)
che li mostra dal vivo.
Di questi effetti i più interessanti sono highlight (spesso usato per evidenziare cambiamenti all'interno di una
pagina, per esempio l'aggiornamento del testo di un box), blind (usato per nascondere un elemento) e
transfer (per indicare il rapporto fra due elementi).
Oltre al tipo di effetto il metodo accetta ulteriori due argomenti opzionali: un oggetto JavaScript per la
personalizzazione dell'effetto ed una funzione da eseguire alla fine dell'animazione. I parametri con i quali è
possibile modificare le impostazioni di base degli effetti variano di caso in caso e sono tutti elencati nella
documentazione ufficiale (http://docs.jquery.com/UI/Effects).
Per esempio highlight accetta un oggetto formato da una chiave per il colore (color) da usare ed una per la
modalità di visualizzazione ("hide" o "show"), mentre blind sostituisce color con direction ("vertical" o
"horizontal") per specificare se l'oggetto va animato in orizzontale o verticale.
Scorciatoie di visualizzazione.
Parte degli effetti disponibili con in metodo .effect() possono essere realizzati anche con alcuni metodi già
presenti in jQuery: .show(), .hide() e .toggle(). Questi metodi accettano gli stessi parametri di .effect(),
ma mantengono l'azione svolta in jQuery, permettendo così di visualizzare un elemento con un effetto a tendina
e nasconderlo con una esplosione (esempio (http://www.html.it/guide/esempi/jqueryui/esempi/02-effetti03.html)):
//Mostra nascondi box
$("#mostrabox").click(function () {
var box = $('#box');
if (box.is(':visible')) {
box.hide('explode');
} else {
box.show('blind');
}
});
Come detto in precedenza solo alcuni effetti possono essere associati ai metodi .show(), .hide() e .toggle():
Blind, Clip, Drop, Explode, Fold, Puff, Slide, Scale. Per tutti gli altri è necessario ricorrere sempre a
.effect().
Versione originale: http://javascript.html.it/guide/lezione/4478/il-metodo-effect/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:13
Generalità (versione per la stampa) | Guide JavaScript | Javascript.HT...
1 di 1
http://javascript.html.it/guide/stampa_lezione/4481/generalita/
Generalità
Una parte molto importante dell'interazione fra utenti ed interfaccia riguarda il tipo di interazione da compiere.
Nel web "tradizionale" le possibilità in questo campo erano abbastanza limitate e si riducevano quasi
esclusivamente al click e alla digitazione da tastiera in campi di form.
Al giorno d'oggi, invece, le librerie UI permettono un'interazione più ricca e molto più vicina a quella diffusa
nelle applicazioni desktop. Alcune di queste interazioni riguardano l'ordinamento degli elementi, il loro
trascinamento e la selezione. Molti di noi sono ormai abituati al diverso contesto interattivo, ma provate a
pensare quanto sia diversa (e più povera) l'interazione che abbiamo con una comune pagina web rispetto al
contesto desktop.
In questo capitolo vedremo come alcune interazioni complesse siano rese semplici da implementare grazie ai
metodi di jQuery UI.
Sintassi comune
Prima di iniziare a vedere nel dettaglio le interazioni, è utile sottolineare che nella maggior parte dei casi è
possibile richiamare ed interagire con i metodi di jQuery UI nello stesso modo. Così, se la sintassi seguente
rende trascinabile un elemento con id box (esempio (http://www.html.it/guide/esempi/jqueryui/esempi
/03-draggable-01.html)):
$("#box").draggable();
a sua volta il metodo accetta un argomento sotto forma di oggetto JavaScript che permette di
personalizzare le opzioni di base. Oltre a tale oggetto, possiamo passare ai metodi degli argomenti come
stringa di testo con i quali, ad esempio, disabilitare l'interazione:
$("#box").draggable("disable");
per poi riattivarla passando a .draggable() la stringa "enable".
Se invece volessimo rimuovere definitivamente l'interazione, dovremo passare come primo argomento
"destroy".
Un'ultima possibilità è quella di ricavare o impostare un determinato parametro di configurazione anche dopo
l'inizializzazione dell'interazione:
$("#box").draggable("option","delay"); //ricava un'opzione
$("#box").draggable("option","delay",500); //imposta un'opzione
Versione originale: http://javascript.html.it/guide/lezione/4481/generalita/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:13
Draggable (trascinare oggetti) (versione per la stampa) | Guide JavaScri... http://javascript.html.it/guide/stampa_lezione/4482/draggable-trascinar...
Draggable (trascinare oggetti)
Sebbene spostare oggetti sia un'interazione particolarmente familiare, nel web essa comporta una serie di
considerazioni complesse ed un non meno complesso codice JavaScript per garantire la compatibilità crossbrowser.
jQuery UI risponde a questa esigenza anzitutto con il metodo .draggable() che, associato ad un elemento, lo
rende trascinabile alla pressione del mouse:
$("#contenitore div").draggable();
Per permettere la personalizzazione grafica, a tutti gli elementi associati all'interazione, viene aggiunta la classe
ui-draggable. In più, per permettere un feedback visivo durante il trascinamento, viene aggiunta anche la
classe ui-draggable-dragging.
Opzioni
Naturalmente non tutto si risolve con il semplice metodo senza argomenti: un'interazione di questo tipo
comporta la necessità di essere personalizzabile per aderire al meglio a diverse situazioni ed interfacce.
Questi i parametri principali che possono essere passati al metodo in un secondo argomento di tipo { chiave :
valore} (e il valore di default):
appendTo: (elemento, selettore - 'parent')
L'elemento o il selettore CSS che sarà individuato come contenitore degli elementi draggabili
(trascinabili), il valore di default "parent" indica che verrà usato l'elemento contenitore degli elementi.
axis: (stringa - false)
Limita il movimento sull'asse orizzontale ('x') o verticale ('y').
cancel: (selettore - ':input,option')
Previene l'interazione quando il cursore interagisce con gli elementi indicati nel selettore. Il valore di
default, per esempio, evita che un'elemento sia mosso accidentalmente quando si sceglie un'opzione da
un menu a tendina o si scrive in un campo form.
connectToSortable: (selettore - false)
Questa opzione può essere utile quando sono presenti elementi mobili indipendenti che vogliamo poter
aggiungere ad una lista di elementi ordinabili (indicata dal selettore CSS). Come vedremo più avanti
.sortables() è basato sul drag and drop, ma considera gli elementi mobili come una lista ordinata in cui
ognuno occupa una posizione definita.
containment: (selettore, elemento, array, stringa - false)
Definisce il limite entro il quale gli elementi possono essere trascinati. Alcune opzioni sono: 'parent',
'document', 'window', [x1, y1, x2, y2].
cursor: (stringa - 'auto')
Specifica come deve apparire il cursore durante il trascinamento. In questo caso viene usato il valore CSS
della regola cursor. Non esiste una vera e propria regola, in questo caso: c'è chi usa 'move' e chi
'pointer'. Personalmente preferisco quest'ultima opzione perché è più intuitiva per l'utente medio.
delay: (intero - 0)
Indica i millisecondi fra il momento in cui l'utente clicca con il mouse e l'inizio dell'interazione. Può essere
utile per evitare click accidentali. Tuttavia un intervallo troppo lungo può essere interpretato come una
lentezza dell'applicazione.
distance: (intero - 1)
Indica di quanti pixel dovrà muoversi il mouse (quando premuto) perché l'elemento inizi a seguirlo. Come
1 di 3
14/06/2012 00:14
Draggable (trascinare oggetti) (versione per la stampa) | Guide JavaScri... http://javascript.html.it/guide/stampa_lezione/4482/draggable-trascinar...
nel caso precedente questa opzione può prevenire interazioni accidentali, tuttavia valori elevati
renderanno gli elementi troppo appiccicosi e difficili da spostare.
grid: (array - false)
Lega il movimento dell'elemento mobile ad una griglia definita in pixel. Questa opzione è utile quando si
ha la necessità di ordinare spazialmente più elementi, per esempio nel caso in cui volessimo rendere
l'idea di una scacchiera. Il valore passato è un array con un valore per la larghezza ed uno per l'altezza di
un blocco della griglia.
handle: (elemento, selettore - false)
Identifica un elemento da utilizzare come maniglia per il trascinamento. In questo modo l'interazione
verrà avviata solo quando l'utente cliccherà e trascinerà quello specifico elemento, ma non in altre parti
dell'elemento mobile.
helper: (stringa, funzione - 'original')
Permette l'utilizzo di elementi di aiuto. Se impostato su 'clone', ad esempio, verrà creato un clone
dell'oggetto da trascinare e sarà spostato quest'ultimo invece dell'elemento originale fino al suo rilascio.
In alcuni casi è possibile generare con una funzione un elemento DOM che funga da segnaposto per
l'elemento (per esempio un piccolo box) in modo da limitare la complessità dell'elemento trascinato,
aumentare le performance e semplificare l'interfaccia. Di default viene utilizzato direttamente l'elemento
da trascinare.
opacity: (decimale - false)
Indica l'opacità che deve assumere l'elemento di aiuto. Può essere utile per indicare visivamente lo stato
precario dell'elemento e per mostrare gli elementi a lui sottostanti.
scope: (stringa - 'default')
Viene utilizzato per raggruppare elementi trascinabili con aree di rilascio specifiche. In pratica serve a
definire dei contenitori entro i quali poter rilasciare gli elementi.
scroll: (booleano - true)
Se impostato su true il contenitore dell'elemento trascinato scorrerà (scrolling) seguendo il movimento.
Questa opzione è utile per facilitare l'interazione ad utenti con basse risoluzioni o schermi piccoli o in
presenza di aree di trascinamento molto estese.
snap: (booleano, selettore - false)
Se impostato ad un selettore o su true, l'elemento trascinato si incollerà ad un elemento adiacente
arrivato ad una certa distanza da questo.
snapMode: (stringa - 'both')
Definisce a quale limite degli elementi adiacenti si incollerà l'elemento trascinato. I valori possibili sono:
'inner', 'outer', 'both'.
snapTolerance: (intero - 20)
La distanza entro la quale si verifica lo snap. L'effetto per l'utente sarà quello di una calamita.
La lista completa delle opzioni è disponibile su questa pagina (http://docs.jquery.com/UI/Draggable), mentre
qui (http://www.html.it/guide/esempi/jqueryui/esempi/03-draggable-02.html) sono disponibili alcuni esempi.
Eventi associati
Oltre alle opzioni è possibile associare all'oggetto passato a .draggable() delle funzioni di callback in base agli
eventi dell'interazione, questi sono:
start (inizio del trascinamento)
stop (fine dell'interazione)
drag (durante il trscinamento)
Tutte le callback ricevono due argomenti: l'evento nativo del browser e un oggetto ui con le seguenti proprietà:
ui.helper - l'oggetto jQuery dell'elemento trascinato
ui.position - la posizione attuale dell'elemento trascinato del tipo {alto,sinistra}, relativamente
all'elemento contenitore
ui.offset - la posizione attuale dell'elemento trascinato del tipo {alto,sinistra}, relativamente alla
pagina
2 di 3
14/06/2012 00:14
Draggable (trascinare oggetti) (versione per la stampa) | Guide JavaScri... http://javascript.html.it/guide/stampa_lezione/4482/draggable-trascinar...
Versione originale: http://javascript.html.it/guide/lezione/4482/draggable-trascinare-oggetti/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
3 di 3
14/06/2012 00:14
Droppable (rilasciare oggetti trascinati) (versione per la stampa) | Guid...
http://javascript.html.it/guide/stampa_lezione/4483/droppable-rilasciar...
Droppable (rilasciare oggetti trascinati)
L'interazione droppable è strettamente collegata a draggable e insieme concorrono al paradigma del drag'n'drop
ormai molto diffuso sul web.
Sintetizzando il concetto, droppable realizza il contenitore in cui gli elementi trascinabili possono essere
rilasciati.
In jQuery UI questa interazione è richiamata dal metodo .droppable():
$("#dropbox").droppable();
Opzioni
Le opzioni principali che possono essere passate a .droppable() (sempre attraverso un oggetto JavaScript)
sono:
accept: (selettore, funzione - '*')
Indica quali elementi trascinabili sono accettati all'interno del contenitore. Può essere un selettore CSS
del tipo "#lista div" oppure una funzione da applicare sull'elemento trascinato e che deve restituire
true perché questo venga accettato. Di default ogni elemento può essere rilasciato nel
contenitore.
greedy: (booleano - false)
Se impostato su true previene la propagazione dell'evento di rilascio agli elementi annidati nel
contenitore. Questo significa che un elemento risulterà aggiunto al contenitore solo se rilasciato
direttamente al suo interno, ma non all'interno di eventuali figli.
scope: (stringa - 'default')
Permette di accettare solo elementi trascinati che appartengono allo stesso scope (che viene impostato
con la stessa modalità in draggable), in modo da poter filtrare gli elementi prima ancora di rilasciarli.
tollerance: (stringa - 'intersect')
Definisce quando un oggetto può essere rilasciato in modo che possa essere catturato dal contenitore. I
valori possibili sono:
fit: tutto l'elemento trascinato è sopra al contenitore
intersect: almeno metà dell'elemento è sopra il contenitore
pointer: il mouse è nel contenitore
touch: appena l'elemento tocca il contenitore.
Questa opzione è molto importante per quanto riguarda l'esperienza utente, in quanto da essa dipende
l'usabilità dell'interazione. In realtà nessuna di esse è più indicata dell'altra, ma tutto dipende dalle
dimensioni degli elementi trascinati e dalla distanza fra il punto di inizio e fine del
trascinamento. Ad esempio, intersect è un buon compromesso solo nel caso in cui l'oggetto trascinato
non sia troppo grande, mentre touch potrebbe attivare l'interazione troppo presto rendendo l'interfaccia
imprecisa.
Eventi
Come per .draggable(), è possibile associare una funzione di callback ad alcuni eventi durante l'interazione.
Tutte le funzioni accettano due argomenti: l'evento e un oggetti ui con le seguenti chiavi:
.draggable - un oggetto jQuery del elemento che trascinato.
.helper - l'helper dell'oggetto trascinato (che potrebbe essere l'oggetto stesso).
1 di 2
14/06/2012 00:14
Droppable (rilasciare oggetti trascinati) (versione per la stampa) | Guid...
http://javascript.html.it/guide/stampa_lezione/4483/droppable-rilasciar...
.position - la posizione dell'helper in formato oggetto { top: , left: }.
.offset - la posizione assoluta dell'helper in formato oggetto { top: , left: }.
Gli eventi a cui è possibile associare una funzione sono:
activate / deactivate: questi eventi sono lanciati quando un elemento a cui è associato .draggable()
viene trascinato o rilasciato. Può risultare utile per evidenziare l'area di rilascio solo quando un oggetto
viene trascinato per mantenere più pulita l'interfaccia.
over / out / drop: questi eventi segnano l'interazione fra l'elemento trascinato e l'area di rilascio,
più precisamente quando l'elemento è dentro l'area (vedi l'opzione tollerance), ne esce oppure vi viene
rilasciato.
Su questa pagina (http://www.html.it/guide/esempi/jqueryui/esempi/04-droppable.html)è possibile vedere
alcuni esempi del metodo in azione.
Versione originale: http://javascript.html.it/guide/lezione/4483/droppable-rilasciare-oggetti-trascinati/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
2 di 2
14/06/2012 00:14
Resizable (ridimensionare finestre ed elementi) (versione per la stampa)...
1 di 2
http://javascript.html.it/guide/stampa_lezione/4501/resizable-ridimens...
Resizable (ridimensionare finestre ed elementi)
Ridimensionare le finestre del nostro sistema operativo è un'operazione che compiamo spesso e che serve a
gestire meglio la limitata dimensione del nostro monitor; al contrario, sul web l'esigenza di poter ridimensionare
blocchi e finestre a comparsa è stata per molti anni poco sentita, viste le limitate interazioni disponibili per
l'utente.
Con l'introduzione di finestre modali al posto dei pop-up e successivamente di layout "mobili" e personalizzabili,
è stato necessario realizzare anche questo tipo di interazione.
jQuery UI mette a disposizione il metodo .resizable(), che permette di ridimensionare un elemento con
lo stesso tipo di azioni ormai familiari nelle applicazioni desktop semplicemente richiamando su di esso il
metodo:
$("#box").resizable();
In questo modo verranno aggiunte delle maniglie (di default sul lato destro, basso e nell'angolo inferiore
destro del box) con le quali poter allargare o restringere un elemento (esempio (http://www.html.it/guide
/esempi/jqueryui/esempi/05-resizable-01.html)).
L'utilizzo di questa interazione è molto delicato poiché il ridimensionamento di un elemento potrebbe causare
problemi alla visualizzazione di quelli adiacenti o addirittura "scombinare" l'intero layout. Proprio per questo è
importante personalizzarne il comportamento per adattarlo alle nostre esigenze.
Opzioni
Le opzioni di personalizzazione più importanti in questo caso sono:
maxHeight / maxWidth / minHeight / minWidth : (intero - null)
imposta dimensioni massime e minime per l'elemento ridimensionato. È un'impostazione importante per
evitare che l'utente possa rimpicciolire troppo un box, perdendo la possibilità di interagirvi, oppure al
contrario che possa ingrandirlo troppo oltre il layout o il viewport del browser tanto da oscurare altri
elementi;
containment : (stringa, selettore, elemento - false)
indica un elemento che delimiti l'estendibilità dell'oggetto ridimensionabile. Anche in questo caso, se
possibile, identificare un contenitore serve a limitare entro limiti ragionevoli le possibilità dell'utente;
aspectRatio : (booleano, decimale - false)
dà la possibilità di forzare una proporzione fra altezza e larghezza durante il ridimensionamento. Se
impostato su true verranno mantenute le proporzioni originali altrimenti si possono impostare
proporzioni personalizzate come 0.5 o 16/9;
handles : (stringa,oggetto - 'e, s, se')
indica quali maniglie devono essere create per il ridimensionamento. Le posizioni possibili sono
identificate secondo le sigle dei punti cardinali, quindi quelle di default sono est, sud, sudest (destra,
sotto, in basso a destra);
Fra le opzioni troviamo anche grid, delay e distance, che ricalcano quelle già trovate in .draggable().
Rispettivamente indicano una griglia di ridimensionamento fissa, dopo quanto tempo avviare l'interazione e
dopo quanti pixel di trascinamento di una maniglia. La regolazione di questi parametri concorre alla sensazione
di "appiccicosità" dell'elemento al layout sottostante.
Infine, due tipologie di opzioni contrastanti sono animate e ghost: la prima abilita il ridimensionamento
con un'animazione (e specifici valori per andamento e durata), la seconda crea un helper semitrasparente
14/06/2012 00:14
Resizable (ridimensionare finestre ed elementi) (versione per la stampa)...
2 di 2
http://javascript.html.it/guide/stampa_lezione/4501/resizable-ridimens...
che fa da traccia durante il ridimensionamento.
La differenza a livello di interfaccia è sostanziale: come succede nei sistemi desktop, un'animazione risulta senza
dubbio più "spettacolare" tuttavia richiede più risorse rispetto ad un helper e soprattutto rallenta l'utente che
deve aspettare la fine dell'effetto per continuare il suo lavoro.
In generale, se non strettamente necessario, l'animazione risulta superflua e controproducente.
Ecco alcuni esempi (http://www.html.it/guide/esempi/jqueryui/esempi/05-resizable-02.html) di
personalizzazione del metodo.
Eventi
Chiudiamo questa lezione con la lista di eventi collegati a .resizable(), che sono start, stop e resize, lanciati
all'inizio, alla fine e durante il ridimensionamento.
Tutti questi eventi accettano due argomenti: l'evento Javascript e un oggetto ui con le seguenti proprietà:
.helper - un oggetto jQuery contenente l'helper
.originalPosition - {top, left} posizione originale dell'elemento
.originalSize - {width, height} dimensione originale
.position - {top, left} posizione corrente
.size - {width, height} dimensione corrente
Versione originale: http://javascript.html.it/guide/lezione/4501/resizable-ridimensionare-finestre-ed-elementi/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:14
Selectable (selezionare oggetti) (versione per la stampa) | Guide JavaSc...
1 di 1
http://javascript.html.it/guide/stampa_lezione/4525/selectable-selezion...
Selectable (selezionare oggetti)
La caratteristica vincente dei file manager grafici rispetto a quelli testuali o alla riga di comando, è la possibilità
di selezionare file e cartelle semplicemente selezionandole con un click del mouse, oppure disegnando
un rettangolo su più elementi che vengono raggruppati in un'unica selezione.
Il metodo .selectable() di jQuery UI permette di applicare facilmente questa interazione ad elementi presenti
in un interfaccia web, fornendo sia un metodo di selezione multipla "con rettangolo" sia un sistema di
selezione di elementi non contigui con l'uso del tasto Ctrl (o Mela) in abbinamento al click sinistro del
mouse.
Poter selezionare in questo modo degli elementi fornisce un'interazione più veloce e intuitiva con liste di oggetti
rispetto a quelle basate, ad esempio, sui tradizionali checkbox dei moduli (provare per credere
(http://www.html.it/guide/esempi/jqueryui/esempi/06-selectable-01.html)).
Opzioni
Le opzioni pù importanti con le quali personalizzare l'interazione sono:
filter : (selettore - "*")
permette di identificare specifici elementi da rendere selezionabili, per esempio:
$("#lista").selectable({filter : "li.selezionabile"});
delay : (intero - 0)
millisecondi dopo i quali selezionare un elemento.
distance : (intero - 0)
solo dopo che il rettangolo di selezione sarà sovrapposto a un elemento per i pixel specificati questo verrà
selezionato. Questa opzione è strettamente legata a quanto impostato in tolerance.
tolerance : (stringa - 'touch')
se impostato su 'touch' l'elemento sarà selezionato appena il rettangolo di selezione lo toccherà,
altrimenti, se impostato su 'fit', tutto l'elemento dovrà essere all'interno del rettangolo di selezione.
Anche in questo caso l'opzione migliore è relativa alle dimensioni dell'area di selezione e degli
elementi selezionabili. Touch è spesso la risposta migliore ma con elementi molto concentrati potrebbe
rendere difficoltosa e frustrante la selezione. Ecco alcuni esempi (http://www.html.it/guide/esempi
/jqueryui/esempi/06-selectable-02.html).
Eventi
Gli eventi associati a .selectable() sono:
start / stop: lanciati all'inizio e alla fine dell'interazione.
selecting / unselecting: lanciati quando un elemento sta per essere selezionato o deselezionato.
Potrebbe essere utile per colorarlo diversamente in modo da migliorare il feedback dato all'utente.
selected / unselected: lanciati su elementi appena selezionati o deselezionati.
Versione originale: http://javascript.html.it/guide/lezione/4525/selectable-selezionare-oggetti/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:15
Sortable (ordinare elementi) (versione per la stampa) | Guide JavaScript...
1 di 3
http://javascript.html.it/guide/stampa_lezione/4549/sortable-ordinare-...
Sortable (ordinare elementi)
L'ultima interazione di jQuery UI che affrontiamo è .sortable() e nasce dall'unione di più interazioni delle quali
condivide molte opzioni: .draggable() e .droppable().
La caratteristica aggiuntiva del metodo rispetto alle interazioni che lo compongono è che gli elementi non
vengono solo trascinati e rilasciati, ma vanno a creare un insieme ordinato ricavabile tramite un metodo
specifico. In questo modo è possibile offrire all'utente un sistema intuitivo e diretto per ordinare liste di vario
genere al posto di metodi più tradizionali come select e campi di testo numerici (esempio (http://www.html.it
/guide/esempi/jqueryui/esempi/07-sortable-01.html)).
Configurazione
Come per le altre interazioni, anche .sortable() ha alcune interessanti opzioni di personalizzazione.
Anzitutto condivide opzioni presenti in .draggable(), come axis (per specificare l'asse secondo cui è possibile
trascinare un elemento), delay e distance per controllare quando l'interazione fra il mouse e gli elementi deve
iniziare, oppure grid per costringere gli spostamenti secondo una griglia in pixel.
Il metodo ha anche opzioni proprie, più specifiche per la personalizzazione dell'ordinamento degli elementi:
connectWith : (selettore - false)
Connette gli elementi ordinabili ad un'altra lista ordinabile, in modo che possano essere trascinati dall'una
all'altra.
$('.lista').sortable({ connectWith: '.altralista' });
dropOnEmpty : (booleano - false)
Se impostato su false gli elementi della lista non possono essere rilasciati in una lista collegata (con
connectWith) se quest'ultima è al momento vuota.
Ecco alcuni esempi (http://www.html.it/guide/esempi/jqueryui/esempi/07-sortable-02.html) di
personalizzazione.
Eventi
Gli eventi associati all'interazione, e ai quali possiamo collegare una funzione di callback, sono:
start / sort / stop: lanciato all'inizio, durante ed alla fine dell'interazione.
change: lanciato durante l'ordinamento, ma sono quando la posizione dell'elemento trascinato è
cambiata.
beforeStop: lanciato quando l'ordinamento è finito ma l'helper (impostato con l'opzione helper) è
ancora disponibile.
update: lanciato quando l'utente rilascia un elemento e la sua posizione è cambiata.
receive: lanciato quando una lista connessa (con connectWith) riceve un elemento dalla lista corrente.
remove: lanciato quando un elemento è rimosso da una lista per essere inserito in una collegata.
over / out: lanciato quando un'elemento viene spostato su una lista collegata o ne esce.
activate / deactivate: lanciato su tutte le liste collegate quando ha inizio l'interazione sulla lista
principale.
Tutti gli eventi prevedono due argomenti: l'evento nativo del browser ed un oggetto ui con le seguenti
proprietà:
14/06/2012 00:15
Sortable (ordinare elementi) (versione per la stampa) | Guide JavaScript...
2 di 3
http://javascript.html.it/guide/stampa_lezione/4549/sortable-ordinare-...
.helper: l'helpercorrente.
.position: posizione dell'helper.
.offset: posizione assoluta dell'helper.
.item: l'elemento trascinato corrente.
.placeholder: il segnaposto se definito.
.sender: la lista di provenienza, solo nel caso in cui ci siano liste collegate a quella principale.
Metodi specifici
Come per le altre interazioni, anche .sortable() supporta dei metodi generici per inizializzare o rimuovere
l'interazione, oppure per cambiare alcune opzioni su un'interazione preesistente:
//Inizializza la lista con le opzioni di default
$("#lista1").sortable();
//Personalizza un'opzione specifica
$("#lista1").sortable("option","connectWith","#lista2");
Oltre a questi metodi, comuni a tutte le interazioni, .sortable() ne offre altri utili per gestire l'ordinamento
degli elementi nella lista:
cancel: cancella l'ultimo cambiamento avvenuto nella lista.
È utile per permettere all'utente di tornare sui propri passi, oppure associato agli eventi stop e
receive per rimediare ad eventuali ordinamenti errati:
$("#lista1").sortable({
stop : function (event,ui) {
if (ui.item.is(".bloccato")) {
// this si riferisce alla lista
$(this).sortable("cancel");
}
}
});
refresh: aggiorna gli elementi della lista, aggiungendo quelli non presenti al momento
dell'inizializzazione dell'interazione (aggiunti, per esempio, con AJAX).
serialize: serializza gli id degli elementi ordinati, restituendo una stringa inviabile via AJAX o attraverso
un form. La struttura degli id da assegnare agli elementi della lista segue una regola generale del tipo
nomevariable_valore, quindi una lista del tipo:
<ul
<li
<li
<li
</ul>
id="lista">
id="lista_1">Uno</li>
id="lista_3">Tre</li>
id="lista_2">Due</li>
Sarà serializzata nella stringa:
"lista[]=1&lista[]=2&lista[]=3"
toArray: raccoglie gli id degli elementi nella lista e li restituisce sotto forma di array JavaScript.
Riprendendo la lista dell'esempio precedente:
var lista
//restituisce
// lista[0] =
// lista[1] =
// lista[2] =
= $("#lista").sortable("toArray");
"lista_1"
"lista_3"
"lista_2"
14/06/2012 00:15
Sortable (ordinare elementi) (versione per la stampa) | Guide JavaScript...
3 di 3
http://javascript.html.it/guide/stampa_lezione/4549/sortable-ordinare-...
Per quanto riguarda il metodo serialize, è possibile modificare il comportamento di default passando un
secondo argomento sotto forma di oggetto JavaScript contenente una o più delle seguenti opzioni:
key: indica una stringa da sostituire alla prima parte dell'id (corrispondente al nome della variabile)
attribute: indica un attributo valido dell'elemento da utilizzare al posto di id
expression: filtra il valore di id (o dell'attributo specificato con attribute) con un'espressione regolare
per estrarne il valore da inserire nella stringa finale.
Versione originale: http://javascript.html.it/guide/lezione/4549/sortable-ordinare-elementi/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:15
Introduzione ai widget di jQuery UI (versione per la stampa) | Guide J...
1 di 2
http://javascript.html.it/guide/stampa_lezione/4575/introduzione-ai-wi...
Introduzione ai widget di jQuery UI
Nelle interfacce delle applicazioni web moderne, i controlli nativi dei browser come select, checkbox e campi di
testo, risultano spesso limitativi per le esigenze di interazione con l'utente. In alcuni casi, ad esempio, avere a
disposizione un calendario a comparsa per la selezione delle date facilita l'utente rispetto a dover scegliere da
tre menu a discesa, magari controllando il giorno della settimana sul calendario del sistema operativo.
Questi tipi di controlli web ricadono in jQuery UI sotto il nome di Widget. Il nome potrebbe essere in alcuni
casi fuorviante, visto che è spesso associato ad applicazioni del desktop, tuttavia in questo caso si tratta solo di
controlli atti a semplificare e ordinare la fruizione e l'inserimento dei dati da una pagina web.
Quali Widget?
Un'altra parte del discorso relativa all'utilizzo dei widget è: quali usare e quando?
In linea di principio, è importante utilizzare i widget quando strettamente richiesto, in modo da non
sovraccaricare la pagina con eccessivo codice JavaScript in esecuzione, senza lasciarsi abbagliare dai luccichii
degli effetti grafici.
In definitiva, non sempre i dati vanno divisi in tab o accordion, oppure non sempre mostrare un messaggio con
una finestra modale può migliorare il feedback all'utente (chi di voi non ha mai visto alcuni messaggi di errore di
Facebook, trovandoli eccessivamente tecnici).
Widget disponibili
jQuery UI comprende nativamente sei tipi di widget, completamente compatibili con i temi UI generati da
Theme Roller (http://jqueryui.com/themeroller/) (la web application per la gestione dei temi) e ricchi di opzioni
di personalizzazione.
I widget che vedremo nelle prossime lezioni sono:
Accordion
Datepicker
Dialog
Progressbar
Slider
Tabs
Derivando dalle interazioni, tutti i widget ne prevedono una sintassi simile. È quindi possibile passare un oggetto
al metodo che inzializza il controllo, come leggerla e modificarla successivamente:
//inizializzo un widget
$("#accordion").accordion({ active : 2 });
//leggo un'opzione
var active = $("#accordion").accordion("option","active");
// imposto un'opzione
$("#accordion").accordion("option","active",1);
Oltre ad option, in generale i widget accettano altri tre metodi:
destroy: rimuove il widget dall'elemento a cui era associato;
disable: disabilita temporaneamente il widget;
enable: abilita il widget nel caso in cui sia stato disabilitato.
14/06/2012 00:20
Introduzione ai widget di jQuery UI (versione per la stampa) | Guide J...
2 di 2
http://javascript.html.it/guide/stampa_lezione/4575/introduzione-ai-wi...
Voglio di più!
In un capitolo successivo di questa guida vedremo come estendere jQuery UI con widget personalizzati. Questo
processo è semplificato da una nomenclatura e una documentazione abbastanza rigorose, ma proprio per
questo è necessario rispettare molte regole e non sempre si raggiunge la flessibilità voluta.
Versione originale: http://javascript.html.it/guide/lezione/4575/introduzione-ai-widget-di-jquery-ui/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:20
Accordion (versione per la stampa) | Guide JavaScript | Javascript.HT...
1 di 2
http://javascript.html.it/guide/stampa_lezione/4576/accordion/
Accordion
Il primo widget che prendiamo in considerazione è Accordion (in italiano "fisarmonica"), un controllo attraverso
il quale vengono nascosti e mostrati determinati blocchi di dati in base all'interazione con l'utente.
Questo tipo di widget viene utilizzato principalmente in due casi: per ridurre l'ingombro del testo nella
pagina oppure per focalizzare l'attenzione dell'utente su una determinata porzione di testo.
Struttura di base
Diversamente da altre librerie UI (per esempio ExtJS), jQuery UI si applica su codice HTML pre-esistente e
quindi, per il corretto funzionamento del controllo è necessario dare una specifica struttura al blocco di codice su
cui vogliamo applicarlo.
Nel caso di Accordion l'HTML di base è il seguente:
<div id="accordion">
<h3><a href="#">Primo headerheader</a></h3>
<div>First contenuto</div>
<h3><a href="#">Secondo header</a></h3>
<div>Secondo contenuto</div>
</div>
A questo punto ci basterà richiamare il metodo .accordion() sull'elemento con id accordion per attivare il
widget (esempio (http://www.html.it/guide/esempi/jqueryui/esempi/09-accordion-01.html)):
$("#accordion").accordion();
Opzioni
Accordion offre un buon numero di opzioni (http://docs.jquery.com/UI/Accordion#options) per personalizzare il
comportamento del widget. Le più interessanti sono:
active : (selettore, jQuery, elemento DOM, numero, booleano - 'first-child')
indica uno specifico elemento o la sua posizione nell'accordion in modo da renderlo subito visibile una
volta applicato il widget.
autoHeight : (booleano - true)
indica se applicare l'altezza del contenitore di testo più alto a tutti gli altri elementi. Questa opzione è
attiva di default perché rende il controllo più consistente e impedisce che il cambiamento di altezza
dell'accordion possa influire sul posizionamento di altri box nell'interfaccia.
collapsible : (booleano - false)
strettamente collegato all'opzione precedente, se impostato su true permette di chiudere tutte le aree di
testo, facendo collassare completamente il controllo.
event : (stringa - 'click')
di default il widget apre e chiude le aree di testo quando l'utente clicca su un header. In alternativa si può
indicare un diverso evento per l'attivazione dell'animazione, come 'mouseover'.
È molto importante capire quale evento associare all'interazione con l'utente, visto che 'mouseover'
potrebbe sembrare più diretto, ma comporta anche il rischio di un'attivazione accidentale del
widget (esempio (http://www.html.it/guide/esempi/jqueryui/esempi/09-accordion-02.html)).
navigation : (booleano - false)
se impostato su true cerca un'ancora che corrisponda all'URL della pagina (location.href) e la attiva.
Quest'opzione è molto utile per riferirsi ad una specifica porzione di testo da link esterni alla pagina, nello
14/06/2012 00:20
Accordion (versione per la stampa) | Guide JavaScript | Javascript.HT...
2 di 2
http://javascript.html.it/guide/stampa_lezione/4576/accordion/
stesso modo in cui si farebbe con un ancora: http://www.miosito.it/faq.html#lista1.
Metodi
Oltre ai metodi comuni ai widget jQuery UI, .accordion() offre un metodo specifico per attivare una delle
sue porzioni di testo, in modo da poter interagire con il controllo anche senza l'azione diretta dell'utente:
$("#accordion").accordion("activate",2);
Eventi
Come per le interazioni, è possibile associare delle funzioni di callback a determinati eventi:
change: lanciato quando l'accordion cambia. Se il widget è animato, l'evento sarà lanciato al
completamento dell'animazione.
changstart : lanciato appena ha inizio un cambiamento nel widget.
Gli eventi possono essere passati al metodo .accordion() direttamente all'interno dell'oggetto contenente le
opzioni, oppure con il metodo .bind():
$(".ui-accordion").accordion({changestart : function() { ... } });
$(".ui-accordion").bind("accordionchangestart", function() { ... });
Ambedue gli eventi accettano due argomenti: l'evento JavaScript nativo e un oggetto ui con le seguenti
proprietà:
.newHeader: un oggetto jQuery dell'header attivo;
.oldHeader un oggetto jQuery dell'header attivo in precedenza;
.newContent: un oggetto jQuery del contenuto attivo;
.oldContent: un oggetto jQuery del contenuto attivo in precedenza.
Versione originale: http://javascript.html.it/guide/lezione/4576/accordion/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:20
Datepicker (versione per la stampa) | Guide JavaScript | Javascript.H...
1 di 3
http://javascript.html.it/guide/stampa_lezione/4588/datepicker/
Datepicker
Molto probabilmente ognuno di noi si sarà imbattuto, durante la compilazione di un form, in spiegazioni ed
etichette di campo del tipo gg/mm/aaaa oppure gg/mm/aa. Altrettanto spesso si sarà trovato di fronte a tre
menu a tendina dai quali dover scegliere giorno, mese ed anno, magari chiedendosi che giorno della settimana
sarà il 14 Aprile 2010.
Tutti questi passaggi, controlli, etichette e spiegazioni mettono in evidenza come sia difficile lavorare in
maniera intuitiva e diretta con le date.
La risposta di jQuery UI al problema è il widget datepicker che in italiano definiremmo calendario.
L'utilizzo principale di questo tipo di controllo è da una parte quello di facilitare l'utente nell'inserimento di
date in vario formato, dall'altro quello di ridurre al minimo errori nella formattazione delle date stesse.
Nella sua forma più semplice, il widget è attivabile su ogni elemento di input testuale selezionabile con jQuery
(esempio (http://www.html.it/guide/esempi/jqueryui/esempi/10-datepicker-01.html)):
$(".data:input").datepicker();
Opzioni
Data la diversità di utilizzo e la necessità di adattamento a vari formati di data (sia per sintassi che per lingua),
datepicker offre un nutrito numero di opzioni che spaziano dall'impostazione del formato restituito, al
restringmento delle date selezionabili a determinati range. Il tutto concorre ad ottimizzare l'esperienza utente e
la gestione dell'input nella fase di rielaborazione dei dati.
L'esempio più classico nel quale si ha necessità di personalizzare il widget datepicker è quello di un modulo di
prenotazione nel quale è necessario prevedere più lingue ed evitare che accidentalmente un utente possa
richedere una prenotazione per date nel passato.
Per sintetizzare, le caratteristiche personalizzabili del widget riguardano l'interazione (in che modo il controllo
viene attivato), il formato della data e gli elementi visibili del calendario.
Opzioni per l'interazione
buttonImage: (stringa : '')
indica quale immagine utilizzare come bottone per richiamare il widget. È possibile associarla all'opzione
buttonImageOnly impostata su true per rendere l'immagine (solitamente un'icona) l'unico mezzo per
visualizzare il calendario.
minDate / maxDate
imposta un limite entro il quale è possibile selezionare una data. I valori accettati sono un oggetto Date,
un numero (per esempio +7) o una stringa con valori e periodi ('y' per gli anni, 'm' per i mesi, 'w' per
le settimane, 'd' per i giorni, ad esempio '+1m +1w').
Opzioni di formato
Di default, il linguaggio di datepicker è l'inglese, compresa la formattazione della data secondo lo schema
mese/giorno/anno. Il modo più semplice per impostare il formato corretto in base al proprio linguaggio è quello
di richiamare uno dei file di lingua presenti nella cartella i18n. In questo modo la localizzazione prescelta
sarà applicata automaticamente ad ogni istanza del widget.
Nei casi in cui si dovessero gestire più lingue basterà includere il file di lingua completo jquery-ui-i18n.js ed
14/06/2012 00:21
Datepicker (versione per la stampa) | Guide JavaScript | Javascript.H...
2 di 3
http://javascript.html.it/guide/stampa_lezione/4588/datepicker/
impostare un linguaggio specifico richiamandolo nell'inizializzazione del widget:
$("#calendario").datepicker($.datepicker.regional['it']);
oppure impostandolo globalmente:
$.datepicker.setDefaults($.datepicker.regional['it']);
Le opzioni impostate in questo modo sono le seguenti:
closeText: il testo per il link che chiude il calendario;
prevText / nextText: il testo per i link al mese precente e successivo;
currentText : il testo per "oggi";
monthNames / monthNamesShort: i nomi dei mesi in formato esteso (Gennaio) e abbreviato (Gen);
dayNames / dayNamesShort / dayNamesMin: i nomi dei giorni della settimana in formato esteso
(Lunedì), abbreviato (Lun) e minimo (Lu);
dateFormat: il formato della data, in italiano dd/mm/yy (giorno, mese e anno in due cifre);
firstDay: il primo giorno della settimana, 0 per domenica (nel calendario inglese), 1 per Lunedì;
isRTL: se impostato su true i giorni saranno elencati da destra verso sinistra.
Ecco un esempio (http://www.html.it/guide/esempi/jqueryui/esempi/10-datepicker-02.html) di localizzazione in
italiano.
Opzioni di visualizzazione
Le opzioni di questo gruppo servono per aggiungere o personalizzare il modo in cui viene visualizzato il
calendario:
changeMonth / changeYear: (booleano : false)
se impostate su true, queste opzioni aggiungono in alto un menu a tendina che permette di scegliere
velocemente il mese o l'anno. In questo modo l'utente può selezionare più rapidamente date moto
distanti nel futuro senza dover cliccare ripetutamente sui link di navigazione (esempio
(http://www.html.it/guide/esempi/jqueryui/esempi/10-datepicker-03.html));
duration: indica la durata dell'animazione con cui il calendario appare. Basandosi sulle animazioni di
jQuery i valori accettati sono numeri (millisecondi) oppure stringhe ('slow', 'normal', 'fast');
numberOfMonths: (intero, array : 1)
indica il numero di mesi da mostrare contemporaneamente nel widget. Può essere un numero intero (2
mostrerà il mese corrente ed il prossimo) oppure un array numerico che definisca il numero di righe e
colonne da riempire con i mesi ([2,3] mostrerà sei calendari disposti su due righe e tre colonne). Ecco un
esempio (http://www.html.it/guide/esempi/jqueryui/esempi/10-datepicker-04.html);
showAnim: (stringa : 'show')
indica il tipo di animazione da usare per mostrare il calendario. Può essere usata una qualsiasi delle
animazioni disponibili con jQuery o jQuery UI.
Eventi
Datepicker accetta fra le sue opzioni anche una serie di eventi, utili per impostare l'interazione fra il widget ed
altri elementi della pagina:
beforeShow: lanciato appena prima che il calendario venga mostrato. La funzione collegata accetta due
argomenti, un'istanza dell'input a cui è associato il widget e un'istanza del datapicker stesso;
beforeShowDay: lanciato prima della visualizzazione del calendario. La funzione accetta come
argomento una data e deve restituire un array con tre elementi: true o false per rendere il giorno
selezionabile, una stringa che rappresenti una classe CSS per la presentazione di default, un tooltip da
associare al giorno. Fate attenzione che questa funzione verrà applicata a tutti i giorni presenti nel widget
comportando una diminuzione nelle performance del controllo soprattutto durante la visualizzazione
iniziale e se sono visualizzati più mesi tramite l'opzione numberOfMonths;
beforeShow: permette di definire una funzione personalizzata quando il datepicker passa da un
mese/anno all'altro. Accetta come argomenti l'anno selezionato, il mese (1-12), e l'istanza del datepicker.
14/06/2012 00:21
Datepicker (versione per la stampa) | Guide JavaScript | Javascript.H...
3 di 3
http://javascript.html.it/guide/stampa_lezione/4588/datepicker/
In questo caso this si riferisce all'input associato al widget;
onClose: lanciato quando il datepicker viene chiuso. Accetta come argomenti la data selezionata in
formato stringa e un'istanza del datepicker stesso. L'evento viene lanciato anche se non è stata
selezionata una data;
onSelect: lanciato quando il datepicker viene selezionato. Accetta come argomenti la data selezionata in
formato stringa e un'istanza del datepicker stesso.
Metodi specifici
Il widget, oltre ai metodi generali di jQuery UI visti in precedenza, offre metodi specifici per interagire con i dati
provenenti dal controllo, nonché per interagire con lo stesso.
hide / show: nasconde e mostra il datepicker. Utile quando si vuole mostrare il calendario senza
attendere che l'utente attivi il comportamento predefinito;
getData / setData: ricava ed imposta la data del datepicker. Per setData è necessario fornire un
ulteriore argomento seguendo la stessa sintassi richiesta delle opzioni minDate e maxDate;
dialog: apre il datepicker in un overlay (o finestra di dialogo). È necessario indicare come ulteriore
argomento la data iniziale per il datepicker, mentre si possono aggiungere opzionalmente altri tre
argomenti: una funzione di callback a seguito della selezione di una data, un oggetto JavaScript con
nuove opzioni per la visualizzazione, la posizione dell'overlay alto/sinistra in formato [x, y] oppure un
evento del mouse contenente tali coordinate. Se questo argomento non viene specificato, la finestra sarà
centrata nello schermo.
Versione originale: http://javascript.html.it/guide/lezione/4588/datepicker/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:21
Dialog (versione per la stampa) | Guide JavaScript | Javascript.HTML.it
1 di 2
http://javascript.html.it/guide/stampa_lezione/4599/dialog/
Dialog
Nell'utilizzo di un sistema operativo, ognuno di noi ha a che fare con il paradigma delle finestre. Sviluppate a
partire dai primi anni 80, rappresentano il mezzo principale di presentazione del contenuto, sia esso un
messaggio singolo o un insieme di testi, immagini e controlli utente.
Nel web l'utilizzo di questa interfaccia è stato per molto tempo veicolato da controlli nativi del browser e del
sistema operativo, con finestre di dialogo e popup. Il vantaggio di queste soluzioni era quello di essere
estremamente facili da realizzare, tuttavia la loro derivazione prettamente desktop le rendeva poco integrate
con il resto dell'interfaccia web.
Con l'avvento di librerie grafiche come jQuery UI è stato possibile realizzare le finestre a partire da blocchi di
HTML e CSS resi interattivi tramite JavaScript.
Il metodo offerto da UI si appoggia sulle interazioni draggable e resizable per garantire le funzionalità tipiche
di una finestra in ambiente desktop, e permette la personalizzazione grafica grazie alla completa compatibilità
con i temi di Themeroller. Per richiamarlo basta lanciarlo sull'elemento che vogliamo usare come finestra:
$('#finestra').dialog();
Di default il widget verrà aperto automaticamente e realizzerà una finestra con una barra del titolo, un'icona per
la chiusura e cinque maniglie di ridimensionamento (i quattro lati più l'angolo in basso a destra). Quando la
finestra viene ridimensionata, il contenuto in eccesso è nascosto e appaiono automaticamente delle barre di
scorrimento. Ecco un esempio (http://www.html.it/guide/esempi/jqueryui/esempi/11-dialog-01.html).
Opzioni
Essendo basato su due interazioni di UI, resizable e draggable, .dialog() condivide con loro molte opzioni,
tuttavia ne presenta alcune specifiche per la sua personalizzazione:
autoOpen: (booleano - true)
definisce se la finestra debba essere aperta automaticamente quando il metodo è richiamato. Nel caso si
voglia solo inizializzare il widget, si può impostare questo parametro su false e successivamente
mostrarlo con il metodo .dialog('open');
show / hide: (stringa - null)
indica una specifica animazione per mostrare e nascondere la finestra. Tenete sempre presente che l'uso
di animazioni in questi casi serve per dare maggior risalto al contenuto che stiamo per mostrare
e perciò dovrebbero essere utilizzati con parsimonia al fine di non rendere l'interazione troppo pesante;
buttons: (oggetto - {})
aggiunge nella parte bassa della finestra dei bottoni. L'opzione accetta un oggetto Javascript in cui la
chiave rappresenta il testo del bottone, mentre il valore è una funzione di callback lanciata quando il
bottone viene premuto. Il contesto della funzione è la finestra ad esempio:
$('#finestra').dialog({
buttons : {
"Annulla": function() { $(this).dialog("close"); }
[...]
}
});
dialogClass: (stringa - '')
una classe CSS aggiuntiva per personalizzare graficamente la finestra. Può anche essere una classe
14/06/2012 00:21
Dialog (versione per la stampa) | Guide JavaScript | Javascript.HTML.it
2 di 2
http://javascript.html.it/guide/stampa_lezione/4599/dialog/
offerta dal tema di jQuery UI come alert;
draggable / resizable: (booleano - true)
impostando su false queste opzioni, la finestra diventerà rispettivamente fissa oppure non
ridimensionabile. Questa opzione potrebbe essere utile per rendere meno pesante in termini di
risorse la visualizzazione di piccoli messaggi come gli avvisi, che non necessitano di essere
ridimensionati o spostati;
modal: (booleano - false)
rende la finestra un controllo modale. In questo modo tutti gli elementi esterni saranno bloccati
obbligando l'utente ad interagire con essa. Questo comportamento ricalca quello di funzioni
JavaScript come alert() e confirm() ed è molto utile per forzare l'utente secondo un determinato
percorso di interazione. L'uso dell'opzione crea un elemento semitrasparente di overlay grande com il
documento HTML fra l'interfaccia e la finestra;
title: (stringa - '')
Indica il testo da usare come titolo della finestra. In alternativa si può impostare l'attributo HTML title
dell'elemento a cui applicheremo il widget.
Per una lista completa delle opzioni fate riferimento alla documentazione ufficiale (http://docs.jquery.com
/UI/Dialog#options) mentre in questa pagina (http://www.html.it/guide/esempi/jqueryui/esempi/11-dialog02.html) sono disponibili degli esempi pratici.
Eventi
Come per gli altri widget è possibile interagire con dialog anche attraverso funzioni di callback associabili a
specifici eventi che si verificano durante l'interazione fra controllo ed utente:
beforeclose: lanciato quando l'utente cerca di chiudere la finestra. Se la funzione associata restituisce
false, la finestra resterà aperta. Potrebbe essere utile nel caso si voglia verificare che l'utente abbia
compilato dei campi di input obbligatori presenti nella finestra;
open / close: lanciati quando la finestra si apre o chiude;
focus: lanciato quando la finestra riceve il focus da parte dell'utente (solitamente quando l'utente clicca
su di essa);
dragStart / drag / dragStop: ereditati da draggable vengono lanciati quando la finestra è spostata
(inizio, durante, fine);
resizeStart / resize / resizeStop: ereditati da resizable vengono lanciati quando la finestra è
ridimensionata (inizio, durante, fine).
Metodi
Oltre ai metodi comuni a tutti i widget, dialog mette a disposizione alcuni interessanti metodi per interagire con
le finestre direttamente via script:
open / close: con questi metodi è possibile mostrare e nascondere le finestre senza la necessità che
l'utente le richiami direttamente;
moveToTop: quando sono aperte più finestre nella pagina, potrebbero risultare sovrapposte le une alle
altre. Con questo metodo è possibile portare in primo piano una delle finestre;
isOpen: questo metodo restituisce true se la finestra è visibile, altrimenti restituisce false.
Versione originale: http://javascript.html.it/guide/lezione/4599/dialog/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:21
Progressbar (versione per la stampa) | Guide JavaScript | Javascript....
1 di 2
http://javascript.html.it/guide/stampa_lezione/4630/progressbar/
Progressbar
Nelle applicazioni desktop ci imbattiamo spesso in barre di progresso che hanno il duplice compito di mantenere
viva l'attenzione dell'utente (dare feedback) e indicare con una certa approssimazione quanta parte di
un'operazione è stata compiuta.
Per consuetudine ormai acquisita, una barra di progresso viene interpretata dall'utente come la
rappresentazione grafica di un valore percentuale.
Il problema maggiore con questo tipo di controllo utente è che per rappresentare realmente una percentuale è
necessario conoscere in precedenza il valore finale che dovrà essere raggiunto. Sul web tale valore può
rappresentare una dimensione fisica oppure un lasso di tempo: in entrambi i casi non sempre è possibile
reperire questi dati.
Proprio per questo, nella maggior parte dei casi viene preferito come feedback per l'utente uno spinner, ovvero
un'animazione in gif che richiami l'idea di attesa e caricamento.
Proprio per questi motivi, l'uso del widget progressbar in jQuery UI è indicato soprattutto come feedback
visivo del completamento di passaggi successivi in un'operazione complessa. L'esempio tipico è la
compilazione di un modulo di registrazione ad un sito: se il modulo richiede la compilazione di molti campi è
preferibile spezzare l'operazione in sottogruppi più piccoli ed utilizzare una barra di progresso per indicare
all'utente quanto manca alla fine.
Nella sua forma più semplice una progressbar viene attivata con il seguente codice:
$('#barra').progressbar();
In questo modo all'elemento #barra verrà applicato il tema specifico di jQuery UI che renderà la barra di
progresso scalabile (cioè si adatterà al cambiamento di dimensione del contenitore) e soprattutto aggiornabile
con facilità. Ecco un esempio pratico (http://www.html.it/guide/esempi/jqueryui/esempi/12-progressbar01.html) di utilizzo del widget.
Opzioni
L'unica opzione offerta da progressbar è value che permette di impostare e aggiornare il valore percentuale di
completamento nella barra:
// inizializzo la barra al 25%
$('#barra').progressbar({value : 25});
// aggiorno la barra al 50%
$('#barra').progressbar('value', 50);
Eventi
Progressbar offre un unico evento change che viene lanciato quando il valore della barra cambia.
Metodi
Oltre ai metodi comuni a tutti i widget di UI, progressbar offre un metodo specifico value che può essere usato
per impostare o ricavare il valore della barra:
$('#barra').progressbar('value', 70);
14/06/2012 00:22
Progressbar (versione per la stampa) | Guide JavaScript | Javascript....
2 di 2
http://javascript.html.it/guide/stampa_lezione/4630/progressbar/
Versione originale: http://javascript.html.it/guide/lezione/4630/progressbar/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:22
Slider (versione per la stampa) | Guide JavaScript | Javascript.HTML.it
1 di 2
http://javascript.html.it/guide/stampa_lezione/4657/slider/
Slider
Gli slider (o controlli a scorrimento) sono abbastanza comuni nell'esperienza quotidiana di ognuno di noi, anche
al di fuori del mondo digitale e delle interfacce dei PC.
Possono controllare il volume di una radio oppure la luminosità di una lampada e sono utilizzati solitamente
per permettere la variazione lineare di un valore (almeno in apparenza). Questa familiarità del controllo lo
rende molto più efficace di select e campi numerici.
In jQuery UI uno slider è attivabile su un elemento HTML con il codice seguente:
$('#slider').slider();
In questo modo verrà visualizzato uno slider con un cursore scorrevole e un valore impostabile fra 0 e 100
(esempio (http://www.html.it/guide/esempi/jqueryui/esempi/13-slider-01.html)).
Opzioni
Le opzioni offerte per personalizzare lo slider vanno ad influire sul suo comportamento e sui valori accettati
(documentazione ufficiale) (http://docs.jquery.com/UI/Slider#options):
min / max: (intero - 0/100)
indicano rispettivamente i valori minimo e massimo impostabili con lo slider. I valori possono essere
anche negativi.
orientation: (stringa - 'horizontal')
imposta l'orientamento dello slider, se impostato su 'vertical' la barra principale verrà mostrata
verticalmente e i valori andranno dal minimo in basso al massimo in alto.
range: (booleano - false)
se impostato su true, permette di impostare due cursori in modo da poter definire un intervallo di valori.
value: (intero - 0)
imposta il valore iniziale del cursore dello slider. Se usato insieme all'opzione range impostata su true, il
valore passato sarà impostato sul primo cursore.
values: (array - null)
accetta un array di due numeri con i quali impostare i valori iniziali dei cursori. È utilizzabile solo se
l'opzione range è impostata su true
step: (intero - 1)
imposta un intervallo di valori selezionabili.
Ecco alcuni esempi (http://www.html.it/guide/esempi/jqueryui/esempi/13-slider-02.html) esplicativi.
Eventi
È possibile interagire con i vari stati di slider grazie a quattro eventi:
start / stop: come per altri widget questi due eventi vengono lanciati all'inizio ed alla fine del
trascinamento del cursore dello slider.
change: come per stop, questo evento viene lanciato alla fine del movimento del cursore, tuttavia
intercetta anche eventuali modifiche al valore dello slider applicate via scripting (ad esempio con il
metodo value).
slide: viene lanciato durante il trascinamento del cursore. Può essere utilizzato, ad esempio, per
aggiornare un campo testuale con il valore numerico impostato in tempo reale.
14/06/2012 00:22
Slider (versione per la stampa) | Guide JavaScript | Javascript.HTML.it
2 di 2
http://javascript.html.it/guide/stampa_lezione/4657/slider/
Tutte le funzioni associate agli eventi di slider accettano due argomenti: l'evento JavaScript nativo ed un oggetti
ui con le seguenti proprietà:
handle: l'oggetto DOM del cursore che l'utente sta trascinando.
value: un intero indicante il valore attuale dello slider.
Metodi
Oltre ai metodi comuni a tutti i widget, slider offre due metodi aggiuntivi per impostare o ricavare i valori
impostati dall'utente:
value: attraverso questo metodo è possibile impostare o ricavare il valore di slider sotto forma di numero
intero:
//Ricava il valore
$('.#slider').slider('value');
//Imposta il valore
$('.#slider').slider('value',25);
values: si comporta come value ma viene utilizzato per slider con cursori multipli. Accetta come
argomento il numero intero indicante l'indice (partendo da 0) del cursore su cui si vuole lavorare:
//Imposta il valore del primo slider
$('.#slider').slider('value',0,25);
Versione originale: http://javascript.html.it/guide/lezione/4657/slider/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:22
Tabs: opzioni (versione per la stampa) | Guide JavaScript | Javascript...
1 di 2
http://javascript.html.it/guide/stampa_lezione/4664/tabs-opzioni/
Tabs: opzioni
L'utilizzo delle schede (tab) per gestire blocchi di contenuto molto corposi o di diversa natura è ormai divenuta
una soluzione comune nel campo dell'interface design, tanto da essere spesso preso come metro di valutazione
dell'aggiornamento di un software.
Se prendiamo ad esempio il campo dei web browser, una delle pecche maggiormente messe in evidenza del
vecchio IE6 era la mancanza della navigazione a tab ormai comune in Firefox ed Opera. Peraltro questa
soluzione progettuale è diventata così pervasiva da aver invaso anche l'interfaccia di prodotti desktop come
Office.
Per quanto riguarda il web, l'uso di tab è indicato nei casi in cui ci sia necessità di suddividere un contenuto
in blocchi ben distinti, dando così più rilievo alle singole parti via via visualizzate dall'utente.
È invece buona norma evitare le tab (e altre strutture come gli accordion) nel caso in cui il contenuto sia
sostanzialmente omogeneo o comunque presenti rimandi interni, in modo da evitare che l'utente debba saltare
continuamente da una scheda all'altra.
Nella sua configurazione di default, il widget tab è richiamato con il seguente codice:
$('#tabs').tabs();
e crea una struttura di navigazione a schede a partire da una struttura HTML come la seguente (esempio live
(http://www.html.it/guide/esempi/jqueryui/esempi/14-tabs-01.html)):
<div id="tabs">
<ul>
<li><a href="#fragment-1"><span>Uno</span></a></li>
<li><a href="#fragment-2"><span>Due</span></a></li>
<li><a href="#fragment-3"><span>Tre</span></a></li>
</ul>
<div id="fragment-1">
<p>Testo 1</p>
<pre><code>$('#tabs').tabs();</code></pre>
</div>
<div id="fragment-2">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit...
</div>
<div id="fragment-3">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit...
</div>
</div>
Sebbene questa struttura possa essere realizzata con una semantica più corretta, essa rimane comunque
leggibile e navigabile anche quando CSS e JavaScript sono disabilitati, garantendo anche un elevato grado di
accessibilità.
Come vedremo più avanti il widget non si limita ad applicare una serie di interazioni ed effetti grafici al
contenuto preesistente, ma permette anche di caricare dinamicamente il contenuto delle schede, di aggiungere
e cancellare schede on demand.
Opzioni
14/06/2012 00:23
Tabs: opzioni (versione per la stampa) | Guide JavaScript | Javascript...
2 di 2
http://javascript.html.it/guide/stampa_lezione/4664/tabs-opzioni/
Come per altri widget complessi, è possibile adeguare in profondità l'aspetto e le funzionalità delle tab secondo
le proprie necessità progettuali. Ecco le principali:
ajaxOptions: (oggetto)
un oggetto JavaScript contenente le opzioni per la gestione del caricamento di contenuti nelle tab via
AJAX (vedere $.ajax (http://docs.jquery.com/Ajax/jQuery.ajax#options) per le proprietà disponibili).
cache: (booleano - false)
se impostato su true il contenuto delle schede caricato con AJAX sarà salvato nella cache. Per evitare che
anche le richieste AJAX siano salvate nella cache del brower dovrete aggiungere l'opzione cache : false
in ajaxOptions.
collapsible: (booleano - false)
permette di rendere collassabili tutte le schede, lasciando visibili solo le etichette.
cookie: (oggetto - null)
salva l'ultima scheda selezionata in un cookie, per essere riutilizzata come scheda di default quando
l'utente ritorna sulla pagina. Richiede l'utilizzo del plugin cookie (http://plugins.jquery.com/project
/cookie). L'oggetto passato come valore dell'opzione dev'essere formattato secondo quanto previsto dal
plugin cookie, ad esempio: { expires: 7, path: '/', domain: 'jquery.com', secure: true }.
event: (stringa - 'click')
l'evento che permette di visualizzare il contenuto di una scheda. In alcuni casi potrebbe essere preferibile
associare l'apertura di una scheda all'evento mouseover, tuttavia bisogna tener conto dei problemi
legati al movimento involontario del mouse da parte dell'utente.
panelTemplate / tabTemplate: (stringa)
indicano un modello al quale applicare il contenuto di tab caricate in remoto (AJAX) rispettivamente per la
scheda (default '<div></div>') e l'etichetta (default '<li><a href="#{href}"><span>#{label}
</span></a></li>').
selected: (intero : 0)
indica l'indice (a partire da 0) della scheda di default al momento dell'inizializzazione del widget. Per non
impostare alcuna tab passate il valore -1. Se richiamata dal metodo 'option', questa opzione
restituirà l'indice della scheda attiva corrente sotto forma di intero.
L'elenco completo delle opzioni disponibili è in questo documento (http://docs.jquery.com/UI/Tabs#options).
Versione originale: http://javascript.html.it/guide/lezione/4664/tabs-opzioni/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:23
Tabs: eventi e metodi (versione per la stampa) | Guide JavaScript | Java...
1 di 2
http://javascript.html.it/guide/stampa_lezione/4666/tabs-eventi-e-metodi/
Tabs: eventi e metodi
Eventi
Proprio per la complessità del widget, gli sviluppatori ci hanno messo a disposizione una nutrita serie di eventi
con i quali interagire per controllare al meglio l'integrazione di tab con gli altri elementi dell'interfaccia e
l'insieme dell'esperienza di navigazione:
select: è lanciato quando viene selezionata una scheda, più precisamente quando è invocato l'evento
dell'opzione event (di default click).
load: lanciato quando il contenuto di una scheda caricato da remoto viene caricato completamente.
show: lanciato quando una scheda viene mostrata e diventa attiva.
add / remove: lanciato quando viene aggiunta una nuova scheda
enable / disable: lanciato quando una tab viene ablitata o disabilitata.
Tutte le funzioni di callback associate agli eventi accettano come argomenti l'evento JavaScript nativo ed un
oggetto ui con le seguenti proprietà:
tab: etichetta della scheda selezionata
panel: elemento che contiene la scheda corrente
index: un intero indicante l'indice della scheda selezionata (partendo da 0)
Metodi
Attraverso i metodi specifici per tab è possibile interagire via script con le schede gestite dal widget nonché
gestirne il comportamento relativamente alle opzioni di caricamento e aggiunta dinamica di contenuti via AJAX:
add: attraverso questo metodo è possibile aggiungere una scheda al widget sia associandovi un
contenuto già presente nel documento, sia caricandolo da remoto. Al momento non è ancora supportata
la possibilità di caricare contenuti da siti esterni (AJAX cross domain).
Il metodo necessità di due argomenti: il primo di tipo stringa dev'essere un'ancora legata ad un
contenuto presente nel documento oppure un URL da cui caricare in modo asincrono un frammento di
HTML. Il secondo argomento obbligatorio è una stringa da utilizzare come testo della nuova etichetta.
Opzionalmente è possibile passare un indice di tipo numerico per posizionare la nuova scheda in una
posizione precisa del widget, che altrimenti sarà inserito in fondo (esempio (.http://www.html.it/guide
/esempi/jqueryui/esempi/14-tabs-02.html)).
//Carica una nuova scheda da un elemento con attributo
//name="nuovascheda"
$('#tabs').tabs('add','#nuovascheda','Nuova Scheda');
//Carica una nuova scheda da un URL del sito
$('#tabs').tabs('add','carica.php','Nuova Scheda');
remove: rimuove dal widget una tab specifica in base al numero di indice passato come argomento
(partendo da 0).
//Cancella la prima scheda
$('#tabs').tabs('remove',0);
select: rende attiva la scheda indicata come ulteriore argomento:
//Rendi attiva la terza scheda
14/06/2012 00:23
Tabs: eventi e metodi (versione per la stampa) | Guide JavaScript | Java...
2 di 2
http://javascript.html.it/guide/stampa_lezione/4666/tabs-eventi-e-metodi/
$('#tabs').tabs('remove',2);
load: ricarica il contenuto di una specifica scheda caricato dinamicamente. Può essere utile nel caso il
contenuto sia soggetto ad aggiornamenti costanti (per esempio un lettore di feed RSS)
url: cambia l'URL associato ad una scheda dinamica. Necessita di altri due argomenti indicanti
rispettivamente la posizione della scheda nel widget (a partire da 0) ed il nuovo indirizzo da cui caricare i
contenuti.
length: restituisce il numero di tab caricate nel widget.
abort: cancella tutte le richieste AJAX ancora in sospeso per tab caricate dinamicamente.
rotate: attiva una rotazione automatica fra le schede del widget. Accetta come ulteriori argomenti un
intero indicante i millisecondi fra la visualizzazione di una scheda e la successiva, nonché un valore
booleano opzionale per stabilire se la rotazione debba essere continua o fermarsi quando l'ultima scheda
è divenuta attiva.
Questo metodo è molto utile quando il widget viene usato come teaser dei contenuti di un sito.
Usi particolari e note di utilizzo
Proprio per la complessità del widget e la possibilità offerta di aggiungere, rimuovere e caricare schede
dinamicamente, vi sono alcuni accorgimenti utili da seguire per garantire la migliore fruibilità dei contenuti ed
una migliore consistenza nelle funzionalità del widget.
Anzitutto potrebbe essere necessario mantenere la navigazione dei link presenti in una scheda
all'interno di quest'ultima, piuttosto che aprirli in una nuova finestra o nella finestra corrente. In tal caso si
può ricorrere allo script seguente in fase di inizializzazione del widget:
$('#tabs').tabs({
load: function(event, ui) {
$('a', ui.panel).click(function() {
$(ui.panel).load(this.href);
return false;
});
}
});
In secondo luogo è importante sottolineare che ogni componente che richieda un calcolo sulle sue dimensioni
durante l'inizializzazione non funzionerà se caricato in una scheda nascosta, poiché la scheda stessa è nascosta
via CSS con display: none. Un accorgimento utile può essere quello di sovrascrivere il CSS nativo di jQuery UI
con il seguente:
.ui-tabs .ui-tabs-hide {
position: absolute;
left: -10000px;
}
In modo da nascondere le tab inattive semplicemente spostandole al di fuori del viewport. In realtà questa
soluzione non è sempre efficace in quanto molto legata allo specifico contesto del layout dell'applicazione.
Versione originale: http://javascript.html.it/guide/lezione/4666/tabs-eventi-e-metodi/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:23
Themeroller e i temi di jQuery UI (versione per la stampa) | Guide Jav...
1 di 1
http://javascript.html.it/guide/stampa_lezione/4667/themeroller-e-i-tem...
Themeroller e i temi di jQuery UI
Nelle lezioni introduttive abbiamo visto come la struttura grafica dei widget e delle interazioni di jQuery UI sia in
gran parte veicolata dall'inclusione di un file CSS compreso nel pacchetto di installazione.
Dietro a questo file CSS si nasconde un'idea particolarmente innovativa per quanto riguarda i framework UI in
JavaScript: quella di tema grafico.
Nel nostro caso il tema grafico che abbiamo sempre utilizzato nei nostri esempi è chiamato smoothness e viene
rilasciato insieme alla libreria di base.
La struttura di questo tema rispecchia il markup generato dai vari metodi e widget di UI, spesso molto
complessi e verbosi e proprio per questo apparentemente ingestibili nel caso si volessero applicare
personalizzazioni per uniformare i controlli alla nostra interfaccia.
In realtà il team di jQuery UI, in collaborazione con Filament Group, ha sviluppato un applicativo online
chiamato Themeroller per gestire con semplicità quest'operazione.
Themeroller
Themeroller è un applicativo online raggiungibile all'indirizzo http://jqueryui.com/themeroller/
(http://jqueryui.com/themeroller/) che permette di modificare il tema base smoothness secondo le proprie
esigenze con un alto grado di personalizzazione.
Oltre a questo, mette a disposizione molti temi preconfezionati (http://jqueryui.com/themeroller
/#themeGallery) da scaricare direttamente oppure da usare come base per il propio tema.
Fate attenzione che cliccando sul link di download dei temi verrete reindirizzati all'utility di download di jQuery
UI, perciò dovrete scaricare tutto il pacchetto ed estrarre la cartella del tema dala directory css.
Approfondimenti sui temi
La struttura e la nomenclatura che compongono un tema per jQuery UI sono rigidamente standardizzati, per
garantire la compatibilità fra il markup generato dalla libreria e la formattazione disponibile via CSS.
Inoltre, ogni tema mette a disposizione classi specifiche per la visualizzazione e la strutturazione di icone,
messaggi contestuali ed altre parti dell'interfaccia. A tal riguardo potete fare riferimento a questo articolo
(http://javascript.html.it/articoli/leggi/3008/gestire-i-css-in-jquery-ui/), oppure riferirvi direttamente alla
documentazione ufficiale (http://docs.jquery.com/UI/Theming/API)
Versione originale: http://javascript.html.it/guide/lezione/4667/themeroller-e-i-temi-di-jquery-ui/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
14/06/2012 00:24