<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>diploD &#187; boilerplate</title>
	<atom:link href="http://www.diplod.it/tag/boilerplate/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.diplod.it</link>
	<description>by Davide Del Monte</description>
	<lastBuildDate>Fri, 13 Feb 2015 14:26:10 +0000</lastBuildDate>
	<language>it-IT</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>Javascript per &#8220;pagina in caricamento&#8221;: loading con eleganza.</title>
		<link>http://www.diplod.it/2014/01/13/javascript-per-pagina-in-caricamento-loading-con-eleganza/</link>
		<comments>http://www.diplod.it/2014/01/13/javascript-per-pagina-in-caricamento-loading-con-eleganza/#comments</comments>
		<pubDate>Mon, 13 Jan 2014 15:58:51 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Ajax e Javascript]]></category>
		<category><![CDATA[Applicazioni Web]]></category>
		<category><![CDATA[animata]]></category>
		<category><![CDATA[boilerplate]]></category>
		<category><![CDATA[caricamento]]></category>
		<category><![CDATA[flexslider]]></category>
		<category><![CDATA[gif]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[initializr]]></category>
		<category><![CDATA[loading]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1419</guid>
		<description><![CDATA[Sempre più spesso si realizzano siti e applicazioni web che richiedono tempi di caricamento un po' più lunghi del normale, per evitare possibili errori nel codice javascript e rendere l'esperienza utente il più fluida possibile, è buona cosa e giusta mostrare qualcosa durante il caricamento della pagina per poi mostrare il contenuto in toto solo una volta che questo si è generato. Ecco come fare, con eleganza.]]></description>
				<content:encoded><![CDATA[<p>Sempre più spesso si realizzano siti e applicazioni web che richiedono <strong>tempi di caricamento</strong> un po&#8217; più lunghi del normale, per evitare possibili errori nel codice javascript e rendere l&#8217;<strong>esperienza utente</strong> il più <strong>fluida</strong> possibile, è buona cosa e giusta mostrare qualcosa durante il caricamento della pagina per poi mostrare il contenuto in toto solo una volta che questo si è generato.</p>
<p>La <strong>demo</strong>? <a title="Demo - caricamento con gif" href="http://lab.diplod.it/initializr-loading/" target="_blank">Eccola</a>! Provare è sempre più rapido che leggere.. ;) Attenzione che la cosa funziona bene la prima volta, poi la pagina viene messa nella cache e l&#8217;immagine di caricamento sparirà in fretta. Per chi vuole scaricare l&#8217;esempio completo e guardarlo in santa pace, basta fare il download.</p>
<p><a style="padding: 10px; background: #dadada; border: 1px solid #ccc;" href="http://lab.diplod.it/initializr-loading/">DEMO</a> <a style="padding: 10px; background: #dadada; border: 1px solid #ccc;" href="http://www.diplod.it/wp-content/uploads/2014/01/initializr-loading.zip">DOWNLOAD</a></p>
<p>Per fare ciò, la prima cosa necessaria è l&#8217;<strong>immagine di caricamento</strong>, una gif animata è l&#8217;ideale. Si possono generare con le proprie preferenze  tramite tools on line come ad esempio <a title="Preloaders" href="http://preloaders.net/" target="_blank">Preloaders </a>o <a title="Animizer" href="http://animizer.net/" target="_blank">Animizer</a>, col primo si ha a disposizione una nutrita serie di immagini eleganti e predefinite, col secondo si possono creare gif animate a partire da proprie immagini.</p>
<p><span id="more-1419"></span></p>

<a href='http://www.diplod.it/2014/01/13/javascript-per-pagina-in-caricamento-loading-con-eleganza/attachment/9400/'><img width="89" height="128" src="http://www.diplod.it/wp-content/uploads/2014/01/9400.gif" class="attachment-thumbnail" alt="gif creata con Animizer" /></a>
<a href='http://www.diplod.it/2014/01/13/javascript-per-pagina-in-caricamento-loading-con-eleganza/page-loader/'><img width="128" height="128" src="http://www.diplod.it/wp-content/uploads/2014/01/page-loader.gif" class="attachment-thumbnail" alt="gif creata con Preloaders" /></a>

<p>Ora veniamo all&#8217;<strong>HTML</strong>, al <strong>CSS</strong> e al caro <strong>jquery</strong>. Il riferimento principale è la documentazione del <a href="http://learn.jquery.com/using-jquery-core/document-ready/" target="_blank">$(document).ready()</a>.</p>
<p>Per fare le cose fatte bene, ho utilizzato l&#8217;<a title="HTML5 Boilerplate" href="http://html5boilerplate.com/" target="_blank">HTML5 Boilerplate</a>, un blasonato framework di frontend che agevola la scrittura del codice ma soprattutto ci da una solida guida per scriverlo bene. Nel template responsivo generato su <a title="Initializr" href="http://www.initializr.com/" target="_blank">Initializr</a> ho inserito <a title="Flexslider" href="http://www.woothemes.com/flexslider/" target="_blank">flexslider</a>, il famoso slider di woothemes. Ho scelto di impostare l&#8217;ambiente di demo in questo modo per avere a disposizione uno slider con alcune immagini ad alta risoluzione che impieghino un po&#8217; di tempo per caricarsi, ma ovviamente la parte di javascript e html che riguarda il caricamento <strong>può essere utilizzata su qualsiasi sito web</strong>.</p>
<p>Vediamo nel dettaglio la tecnica utilizzata, partendo dall&#8217;<strong>HTML</strong>. Basta inserire questo div subito dopo il tag <em>&lt;body&gt;</em>:</p>
<p><code>&lt;div class="loader"&gt;LOADING...&lt;/div&gt;</code></p>
<p>Visualizziamo la scritta loading, a tutto il resto penserà il foglio di stile.</p>
<p>Questo il <strong>CSS</strong>:</p>
<p><code>.loader {<br />
display: none;<br />
position: fixed;<br />
left: 0px;<br />
top: 0px;<br />
width: 100%;<br />
height: 100%;<br />
z-index: 9999;<br />
background: #fafafa url(../img/page-loader.gif) no-repeat center center;<br />
text-align: center;<br />
color: #999;<br />
}</code></p>
<p>Mettiamo a tutta pagina il div, per coprire tutto il contenuto, con una immagine di caricamento come sfondo. Questo blocco verrà rimosso tramite javascript una volta che il caricamento è avvenuto.</p>
<p>Ecco appunto la parte <strong>javascript</strong> (utilizzando jquery):</p>
<p><code>$( document ).ready(function() {<br />
//una volta caricato il DOM esegui questo codice<br />
//console.log( "DOM ready!" );<br />
$(window).load(function() {<br />
//una volta caricata l'intera pagina (immagini e i frames..) esegui questo codice<br />
//console.log( "Page ready!" );<br />
//faccio scomparire l'immagine di caricamento<br />
$(".loader").fadeOut("slow");<br />
});<br />
});</code></p>
<p>Il costrutto <em>$( document ).ready(function() { .. }</em> ci serve per far eseguire &#8220;qualcosa&#8221; una volta caricato tutto l&#8217;albero (DOM), in questo caso scriviamo semplicemente due righe sulla console del browser; mentre il costrutto  <em>$(window).load(function() { .. }</em> ci serve per fare eseguire &#8220;qualcosa&#8221; una volta caricata l&#8217;intera pagina, comprese appunto le immagini o roba contenuta negli iframe. E&#8217; qui, che oltre a scrivere un log sulla console, andiamo a rimuovere il div di caricamento che copriva tutto il contenuto della pagina.</p>
<p><strong>E&#8217; tutto ciò che serve!</strong></p>
<p>NB: ovviamente, se si vuole iniziare a far vedere la pagina e i suoi contenuti durante il caricamento, la stessa tecnica può essere applicata a un div che non copra tutta la pagina, ma ad esempio solo il box dello slider dove si caricheranno le immagini..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2014/01/13/javascript-per-pagina-in-caricamento-loading-con-eleganza/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
