Responsive images e jQuery: cambiare immagine a seconda della risoluzione

Seguendo il trend delle ultime settimane, così come ha fatto Adobe nel nuovo Dreamweaver CS6 con il Responsive Design e le sue griglie fluide ( la cui traduzione in italiano suona, a mio avviso, veramente male ), mi sono immerso una mezz’ora in jQuery per risolvere un problema con un sito di un cliente.

La necessità parte dal fatto che l’immagine di sfondo, con proprietà width=100%, non può essere proposta sia sul mobile che su tablet e desktop alla stessa maniera, della stessa qualità. Bisogna essere cortesi nei confronti degli user su mobile, giusto?

Partendo da una immagine, ne realizzo una versione MidRes e una LowRes, e mi accingo a scrivere lo script che mi scali l’immagine in maniera dinamica.

L’immagine di partenza è la seguente:

Prima di tutto, inserisco qualche linea di CSS per eliminare i margini di default del BODY e per mostrare al 100% l’immagine presente in pagina:

Codice CSS:

body{
	padding:0px;
	margin:0px;
}
img{
	width:100%;
	height:auto;
}

Codice HTML:

</pre>
<img id="thisimg" alt="" data-lowres="image_lowres.jpg" data-midres="image_midres.jpg" data-hd="image_hd.jpg" />
<pre>

Come noterete, ho usato alcuni tag custom, dove ho indicato le tre versioni diverse della medesima immagine. Come noterete, inoltre, non ho inserito alcuna immagine in SRC. Noteremo più avanti questa anomalia.

Ora, prima di tutto, scrivo in console un messaggio ogni qual volta viene ridimensionata la finestra:

$(window).resize(function(){
	var altezza = $(window).height();
	var larghezza = $(window).width();
	console.log('it\'s resizing, now it\'s ' + larghezza +'x'+ altezza);
});

Ora, se tutto funziona a dovere, dovreste notare in Console la dimensione della finestra ogni qual volta ridimensionerete il tutto. Non funziona? Controllate di avere inserito il riferimento alla libreria jQuery.

Ora creiamo la funzione che controlla la dimensione e, eventualmente, cambiamo l’SRC dell’immagine.

function CheckRes(object){
	// misuro la dimensione della finestra
	var window_width = $(window).width();

	// controllo l'attuale SRC
	var original_src = $(object).attr('src');

	var img_low = $(object).attr('data-lowres');
	var img_mid = $(object).attr('data-midres');
	var img_hd = $(object).attr('data-hd');

	if(window_width		var new_src = img_low;		// smartphone
	}else{
		if(window_width			var new_src = img_mid;	// iPad
		}else{
			var new_src = img_hd;		// desktop
		}
	}
	if(original_src!=new_src){
		$(object).attr('src',new_src);
	}

}

Cosa fa il codice?
Carica la larghezza della finestra nella variabile original_src, successivamente identifica le 3 versioni differenti dell’immagine e, a seconda della risoluzione, se l’SRC è differente dal nuovo, ne modifica il puntamento. Tutto molto semplice.

Aggiungiamo quindi, in fase di resizing, la funzione creata.

$(window).resize(function(){
	var altezza = $(window).height();
	var larghezza = $(window).width();
	//console.log('it\'s resizing, now it\'s ' + larghezza +'x'+ altezza);
	CheckRes('#thisimg');   // Nota che CheckRes deve ricevere il selettore corretto, #thisimg
});

Ora, al momento del caricamento, la pagina rimarrà vuota e l’immagine verrà caricata correttamente solo dopo un window resizing.
Non ci resta che aggiungere l’ultima riga di codice:

$(document).ready(function(e) {
    CheckRes('#thisimg');
});

Il gioco è fatto.
Fate le varie prove, noterete che ogni volta verrà caricata l’immagine corretta a seconda della dimensione della finestra. Buon responsive design!

Se volete vedere l’esempio in pratica, cliccate qui.

jQuery Transit: trasformazioni e transizioni super fluide con CSS3

Oggi parliamo di jQuery Transit, una libreria per jQuery che facilita la creazione di trasformazioni e transizioni CSS3 attraverso l’uso di jQuery.

La versione commentata e completa pesa solamente 17kb, mentre la minified-version occupa 2kb. Come in tutti i plugin di jQuery che si rispettino, l’utilizzo è di una semplicità disarmante e si basa sull’uso del metodo .transition() invece che sul classico .animate().

Il supporto per i browser è limitato a: IE10, Firefox 4+, Safari 5+, Chrome 10+, Opera 11+ e Mobile Safari. Per quanto riguarda i browser che, ahimè, non supportano nessuna animazione o trasformazione CSS3, non saranno attive le trasformazioni.

Tutti questi plugin permettono attività bellissime dal punto di vista grafico, mentre per quanto riguarda la retro compatibilità avremo sempre molti problemi: è il prezzo da pagare soprattutto alla signora Microsoft ed ai suoi browser, che fino alla versione 9 hanno cavato da noi programmatori / designer davvero il peggio, in termini di parolacce ed insulti.

Sito ufficiale di jQuery Transit: http://ricostacruz.com/jquery.transit/

jQuery plugin: knob.js, il plugin studiato per … manopole

Vi starete ancora chiedendo cosa c’entra la parola manopola con questo plugin: beh, se vi cercate la traduzione letterale, knob vuol dire proprio manopola. Non prendetevela con me.

Questo plugin permette di realizzare dei diagrammi grafici piuttosto interessanti, con delle varianti grafiche adattabili a molte situazioni. Il nome di una delle skin grafiche disponibili per questo plugin è tron, come il film della Disney: effettivamente il richiamo mentale è abbastanza azzeccato, anche se l’unica cosa decente di quel film era l’attrice principale, Olivia Wilde. Non aggiungo altro.

Come in tutti i plugin di jQuery, il codice è piuttosto semplice da inizializzare.

<input class="knob" data-width="100" data-displayInput=false value="35">

L’esempio si configura gestendo alcuni tag, come data-width e data-displayInput.
Vi state ancora chiedendo il risultato finale? Eccolo qui:

Non ho avuto ancora la possibilità di testare la compatibilità, nè tantomeno le prestazioni “sul campo”. Ovviamente, non mancherò di aggiornare l’articolo quando i test del caso saranno conclusi.

Ora qualche riferimento: sito ufficiale del plugin, plugin su github

Mappe vettoriali con jQuery

Se la necessità del momento è di interagire con una mappa vettoriale, gestendone i vari click / mouseenter, questo plugin è una vera manna.

Stiamo parlando di JQVMap, un plugin che renderizza nel DOM le mappe vettoriali richieste attraverso poche righe di codice jQuery.

Per il suo funzionamento utilizza alcuni file SVG ( Scalable Vector Graphics ) e ne garantisce la compatibilità totale con IE9, Firefox, Chrome, Opera e Safari.

Ecco un esempio di codice per produrre una mappa del territorio europeo:


<script src="js/jquery.vmap.js"></script>
<script src="js/jquery.vmap.europe.js"></script>

<script>
jQuery('#vmap').vectorMap({
    map: 'europe_en',
    backgroundColor: null,
    color: '#ffffff',
    hoverColor: '#999999',
    enableZoom: false,
    showTooltip: false
});
</script>

<div id="vmap" style="width: 600px; height: 400px;"></div>

Risultato finale:

Eccovi il link alla homepage del plugin: http://jqvmap.com/

Curtain.js: plugin jQuery per gestire alcune transizioni in pagina

Curtain.js è uno di quei plugin che posso tornare molto utili in alcuni casi.
Poniamo il caso di dover mostrare un pannello che, normalmente, rimane nascosto alla vista del visitatore: ecco, curtain.js può fare al caso nostro.

Realizzato da Victor Coulon ( seguilo su Github o su Twitter ), il plugin permette di gestire, mostrare, nascondere e scrollare alcuni pannelli, contenenti foto, testi e tutto quello che può servire.

Pur essendo molto snello come codice, ho trovato ( opinione personale ) un pelo di lentezza nello scroll di contenuti grafici tipo foto fullscreen, mentre il ritorno con testi e foto piccole è eccellente.
La compatibilità con altri script è un po’ borderline: ho riscontrato, per esempio, che utilizzando qualche ChromeApp, queste ultime si schiantano allegramente direttamente sulla Home di curtain.js.

Quindi: usare, ma ( per quanto mi riguarda ) con moderazione.

Come per tutti i plugin, vale di più la pena di andare sul sito ufficiale e testare con mano il funzionamento.