JavaScript » Articoli » JQuery
di: Filippo Buratti 27 Settembre 2011
Nella scorsa uscita Sviluppare layout con le Media Queries
abbiamo realizzato un layout, "one page site", con HTML5 e i CSS3 con un'interfaccia dinamica che si adatta al dispositivo di
navigazione utilizzato, sia esso uno smartphone, un tablet o un normale computer.
Nella seconda parte ora, applicheremo a questa struttura di base alcune tecniche per migliorarne la user experience, facendo
ricorso a Javascript e al supporto del framework jQuery.
Tutto il codice presentato va naturalmente richiamato all'interno del metodo $(document).ready,
in modo da essere eseguito non appena è disponibile l'albero DOM del documento.
A prescindere dal device, la pagina di esempio presenta un andamento di navigazione verticale
e può essere utile gestire, con uno script, lo scroll tra i link interni e le loro destinazioni,
ottenendo un piacevole effetto. Grazie a CSS3
e al selector engine di jQuery vengono selezionati tutti i collegamenti ipertestuali che contengono un'ancora,
nel nostro caso oltre alle voci del menu di navigazione anche i pulsanti "torna sù" presenti in ogni sezione di contenuti.
$('a[href^=#]:not([href=#])').click(function(event){
$('html, body').animate({
scrollTop: $($(this).attr("href")).offset().top
}, 1000);
event.preventDefault();
});
Nello sviluppo per dispositivi touch screen non sono disponibili alcuni dei tradizionali eventi del mouse,
ad esempio non è possibile personalizzare gli stati di un link scatenati dal rollover dell'utente su di esso.
Con qualche riga di codice Javascript si può simulare la pseudoclasse :hover, utilizzando una classe
apposita nel foglio di stile CSS e gli eventi onTouchStart e onTouchEnd, rispettivamente molto
simili ai corrrispondenti onMouseOver e onMouseOut delle interfacce tradizionali.
/* Javascript */
$('a').bind('touchstart', function(event){
$(this).addClass('hover');
}).bind('touchend', function(event){
$(this).removeClass('hover');
});
/* CSS */
nav li a:hover,
nav li a:focus,
nav li a:active,
nav li a.hover {
/* stili personalizzati */
}
Su un piccolo schermo come quello di un iPhone, la barra degli indirizzi di Safari Mobile occupa un'altezza di circa 60px, uno spazio verticale recuperabile altrimenti sottratto ai contenuti. Quindi, applicando il seguente codice Javascript, quando un visitatore apre la pagina del sito è possibile nascondere la toolbar di default:
hideUrlBar = function () {
!pageYOffset && !location.hash && setTimeout(function () {
window.scrollTo(0, 1);
}, 1000);
};
$(document).ready(function() {
var deviceAgent = navigator.userAgent.toLowerCase();
var iOSdevice = deviceAgent.match(/(iphone|ipod)/);
if (iOSdevice) {
hideUrlBar();
}
});
Figura 1 - Barra degli indirizzi del browser Safari Mobile
Implementare uno slideshow di immagini in un layout dinamico come quello della nostra demo comporta che esso sia in grado di adattarsi all'ambiente in cui viene visualizzato e in cui deve interagire. Perfetto per questo è il plugin Flexslider, appositamente pensato per il responsive design. Le prerogative sono veramente interessanti:
inoltre numerosi pararametri di configurazione e metodi di callback che lo rendono particolarmente flessibile ad ogni utilizzo.
Per integrare Flexslider nel nostro progetto basta includere nella head del documento il file Javascript
(solo 7kb di peso in versione minimizzata!) e gli stili CSS necessari.
Quindi è sufficiente richiamare lo script che si occupa di determinare automaticamente le dimensioni in larghezza e altezza dello slider.
$('.flexslider').flexslider({
slideshow: true, // autoplay
animation: "slide", // a scelta slide - fade
controlsContainer: '.flex-container', // wrapper opzionale
slideshowSpeed: 3000,
animationDuration: 1000,
controlNav: true, // controlli di navigazione tra le slide
directionNav: false, // contolli next - prev
touchSwipe: true, // abilita le mobile gestures
});
Il markup HTML utilizzato per costruire lo slider è molto semplice, è richiesto solamente un contenitore aggiuntivo per il corretto posizionamento dei controlli di navigazione inseriti dal plugin. Variando questa struttura è anche possibile inserire una didascalia opzionale su ogni slide.
<div class="flex-container">
<div class="flexslider">
<ul class="slides">
<li><img src="images/technics.jpg"></li>
<li><img src="images/city.jpg"></li>
<li><img src="images/sports.jpg"></li>
<li><img src="images/nature.jpg"></li>
</ul>
</div>
</div>
Per le immagini della sezione Portfolio nella demo del nostro porgetto il plugin jQuery Photoswipe si presta perfettamente all'integrazione di un lightbox di nuova concezione ottimizzato anche per i dispositivi mobili. Chi volesse approfondirne le modalità di utilizzo è consigliata la lettura di Responsive image gallery con HTML5, CSS3 e jQuery PhotoSwipe.
In questo caso non utilizzeremo però PhotoSwipe, ma proveremo una soluzione alternativa, in verità molto simile: si tratta di NETEYE Touch-Gallery che ha tra i suoi vantaggi il peso contenuto e una estrema facilità d'uso. L'installazione è velocissima, basta includere solo il plugin Javascript, non sono richiesti stili CSS aggiuntivi. Anche NETEYE Touch-Gallery è ottimizzato per avere la migliore resa su ogni dispositivo di navigazione, e in più è corredato di un helper che consente la creazione di simpatici activity indicators, molto utili per i loader e da esaminare per l'impiego anche in altri eventuali contesti. Tornando al nostro progetto, per innescare lo script sulla galleria delle immagini basta una riga di codice:
$('.gallery a').touchGallery();
Come abbiamo già visto nell'articolo sulle media queries, affinchè le thumbs si adattino automaticamente al piccolo schermo di uno smartphone e in generale al layout di visualizzazione, è necessario utilizzare questa regola CSS:
/*non max-width per assicurare il supporto delle vecchie versioni di Internet Explorer*/
img { width: 100%; }
Il progetto funzionante e completo di tutti i file è disponibile per il download, un concentrato non esaustivo ma ampio di soluzioni pratiche per avvicinarsi al responsive web design.
Già importante per lo sviluppo web in generale, il tema delle performance lo è ancora di più nell'ambito mobile, sia riguardo all'efficienza e velocità degli script, sia riguardo la riduzione delle richieste HTTP e dei tempi di caricamento. Anche se sempre più potenti e tecnologicamente dotati, i nuovi device mobili devono fare sempre i conti con la velocità della rete di connessione, non sempre all'altezza. In merito a queste problematiche consigliamo la lettura della mini guida Ottimizzazione: Javascript e performance del sito.
Guida Node.jsIl framework che permette di per usare V8, l'interprete JavaScript... |
Canvas, guida ai frameworkCanvas, tra gli elementi di HTML5 è forse quello di maggior impatto.... |
Guida jQuery UICreare siti ricchi e dinamici con jQuery UI, il progetto ufficiale... |
Ogni martedì, direttamente nella tua e-mail: guide, articoli, script, novità e approfondimenti tecnici su JavaScript.
Iscriviti alla newsletter
|
|
Corso Webmaster base18 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso JQuery e Ajax per Webmaster03 Luglio 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |
|
|
Corso Webmaster base11 Giugno 2012 a Roma |