 
 
 <?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>upCreative &#187; tutorial</title>
	<atom:link href="https://www.upcreative.net/tag/tutorial-2/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.upcreative.net</link>
	<description>Web Design, grafica,  web application e content web marketing</description>
	<lastBuildDate>Wed, 10 Apr 2019 12:53:28 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>Come creare un app: realizzare una view di login con il localStorage</title>
		<link>https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/</link>
		<comments>https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/#comments</comments>
		<pubDate>Thu, 29 May 2014 09:53:26 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[backbone]]></category>
		<category><![CDATA[come creare un app]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[localStorage]]></category>
		<category><![CDATA[mobile login]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3994</guid>
		<description><![CDATA[<p>Ecco un altro tutorial in cui ti mostro come creare un app mobile in HTML5, CSS3 e Javascript con Backbone.js. Nell'esperimento visualizzeremo una view di login oppure il contenuto dell'applicazione, controllando, tramite dei dati salvati lato-client su localStorage, se l'utente ha già effettuato il login o meno.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/">Come creare un app: realizzare una view di login con il localStorage</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			In questa mini-guida divisa in due parti, ti ho mostrato <a title="Come gestire i dati di un'applicazione mobile o di una web app sfruttando il Web SQL" href="http://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/">come gestire i dati di un&#8217;applicazione mobile o di una web app sfruttando il Web SQL</a>, un tipo di database che permette di salvare record in locale sul dispositivo utilizzato dall&#8217;utente, tramite istruzioni SQL, linguaggio ben conosciuto dalla maggior parte dei web designers.</p>
<p>I metodi di salvataggio <em>lato-client</em> sono molto utili nel caso di applicazioni mobile sviluppate in HTML5, CSS3 e Javascript, ed è per questo che oggi voglio condividere con te un tutorial incentrato su un&#8217;altro sistema di salvataggio dati <em>lato-client</em>, il <strong>localStorage.</strong></p>
<p>L&#8217;idea di scrivere questo post nasce dalla domanda di uno dei lettori di upCreative.net (a proposito, ringrazio <a href="https://twitter.com/sixdas">sixdas</a> per lo spunto) su come poter creare l&#8217;interfaccia di un&#8217;applicazione mobile che mostri all&#8217;utente una schermata di login oppure il contenuto dell&#8217;app, a seconda se è stato effettuato o meno il login con username e password.</p>
<p>Alle <strong>fine dell&#8217;articolo</strong> potrai trovare il <strong>link per il download dei file sorgenti</strong>.</p>
<hr />
<p><em>Come creare la view di login in un #HTML5 #mobileapp con #backbonejs</em><br /><a href='https://twitter.com/share?text=Come+creare+la+view+di+login+in+un+%23HTML5+%23mobileapp+con+%23backbonejs&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Tutorial su come creare un app: l&#8217;obiettivo finale</h2>
<p>In altre parole, all&#8217;avvio dell&#8217;applicazione controlleremo se nel <em>localStorage</em> è stata salvata una variabile che identifica l&#8217;username dell&#8217;utente: se è presente lo rimanderemo ai contenuti dell&#8217;applicazione, altrimenti visualizzeremo la schermata attraverso la quale egli potrà inserire i propri dati, che useremo poi per impostare la variabile di controllo nel <em>localStorage</em>.</p>
<p><img class="aligncenter wp-image-4015 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/html-mobile-app-login.png" alt="html-mobile-app-login" width="690" height="600" /></p>
<p>Come <em>view</em> interna dell&#8217;app, quella accessibile solamente una volta effettuato il login, useremo la stessa del tutorial &#8220;<a title="Semplice Mobile App con Bootstrap Ratchet e Backbone.js" href="http://www.upcreative.net/smplice-html5-mobile-app-bootstrap-ratchet-backbone-js/"><strong>Semplice Mobile App con Bootstrap Ratchet e Backbone.js</strong></a>&#8221; che ti ho mostrato in precedenza, che sarà quindi utilizzato come &#8220;base&#8221; per questo esperimento (in sostanza, quello che faremo è aggiungere la parte di login).</p>
<p>Il <em>localStorage</em>, di cui avevo parlato <a title="HTML5 Mobile App: tecniche per il salvataggio dei dati" href="http://www.yourinspirationweb.com/2014/04/02/html5-mobile-app-tecniche-per-il-salvataggio-dei-dati/">in questo articolo che ho scritto</a> per YourInspirationWeb.com, è un <strong>sistema di salvataggio dati non-relazionale</strong>, che analogamente all&#8217;<em>indexedDB</em>, si basa sul concetto di coppia chiave-valore, per cui in corrispondenza di ogni chiave possiamo salvare qualsiasi tipo di variabile javascript: una stringa, un numero, un oggetto JSON e così via.</p>
<p>Noi lo utilizzeremo semplicemente per salvare l&#8217;<em>username</em> dell&#8217;utente in corrispondenza della chiave &#8220;<i>user</i>&#8220;, in modo da poter ricontrollare quella variabile ogni volta che l&#8217;applicazione viene avviata, ovvero ogni volta che il documento della pagina <em>index.html </em>viene ricaricato.</p>
<h2>La view del login</h2>
<p>L&#8217;esperimento precedente, basato su <em><a href="http://backbonejs.org/">Backbone.js</a>, </em>era strutturato in questo modo:</p>
<p><img class="aligncenter wp-image-3494 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/03/composizione-backbone-views.jpg" alt="composizione-backbone-views" width="690" height="400" /></p>
<p>Quello che dobbiamo fare è aggiungere la <em>view</em> di login, esattamente allo stesso livello DOM della <em>view</em> principale mostrata nell&#8217;immagine con il colore azzurro, ed effettuare il <em>.render() </em>di una o dell&#8217;altra, a seconda del contenuto della variabile del <em>locaStorage</em>.</p>
<p><img class="aligncenter wp-image-4016 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/html-mobile-login-view.jpg" alt="html-mobile-login-view" width="690" height="400" /></p>
<p>Come prima cosa definiamo <strong>l&#8217;oggetto <em>Backbone.View</em></strong> all&#8217;interno del file <em>demo.js, </em>il file javascript <em>demo.js,</em> in cui sono già presenti tutte le altre <em>view</em>:</p><pre class="crayon-plain-tag">//view per il login che viene mostrata solo quando l'utente non è loggato
var LoginView = Backbone.View.extend({

    // comunichiamo a backbone che deve inserire il markup del template di questa view all'interno di un oggetto dal tag 'section'
    tagName:  "section",

    //settiamo la classe che deve avere il tag 'section'
    className: "page-wrapper login-wrapper",

    //impostaiamo l'id del template da cui generare il markup di questa view
    template: "#loginview-template",

    initialize: function() {

        //compiliamo il template in una variabile
        this.template = _.template($(this.template).html());

        this.AnimEndEventName = this.getAnimEndEventName();
    },

    //funzione che genera il markup di questa view
    render: function () {
        this.$el.html(this.template()); 
        return this;
    },

    /* Grazie a modernizr riprendo il nome dell'evento di fine animazione, che cambia a seconda del browser */

    getAnimEndEventName: function(){

        var animEndEventNames = {
            'WebkitAnimation' : 'webkitAnimationEnd',
            'OAnimation' : 'oAnimationEnd',
            'msAnimation' : 'MSAnimationEnd',
            'animation' : 'animationend'
        };

        return animEndEventNames[ Modernizr.prefixed( 'animation' ) ];
    },

    // Deleghiamo gli eventi per la ricerca sull'input di testo 
    events: {
        //evento //selettore    //funzione da eseguire
        "submit  form":    "login"
    },

    //funzione che gestosce il login del form
    login: function (e) {

        e.preventDefault();
        var _this = this,
            form = $(e.currentTarget); 
            username = $.trim(form.find("[name=username]").val()),  
            password = $.trim(form.find("[name=password]").val()),
            submitBtn = form.find("button");

        //controllo sulla lunghezza di username e password
        if(username.length==0 || password.length==0){
            alert("Username e password sono obbligatori");
            return;
        }

        //qui andrebbe il controllo username e password (magaro tramite SQLite, Web SQL o su Ajax mediante database)
        //ma per questo esperimento simuliamo la cosa con un setTimeout di 2 secondi

        submitBtn.text("Login in corso...");
        setTimeout(function(){
            submitBtn.text("Login");

            //una volta verificate le credenziali di login salvo l'utente in modo persistente sul dispositivo tramite localStorage
            localStorage.setItem("user", username);
             //richiamo la funzione che inizializza i dati degli articoli e mostra la view della lista
            showList();
            //nasondo la view di login in modo da mostrare quella degli articoli
            _this.hide();

        }, 2000);      

    },

    show: function(callback){

        var _this = this;

        //aggiungendo la classe 'opened' al contenitore di questa view 
        //(elemento 'section.login-wrapper') innesco l'animazione di entrata
        this.$el.addClass("opened");

        //se è stata passata una funzione di callback, la richiamo una volta terminato l'evento di fine animazione
        if(callback){
            _this.$el.one( this.AnimEndEventName, function(){
                callback();
            });  
        }

    },

    hide: function(callback){

        var _this = this;
        //aggiungendo la classe 'hidden' al contenitore di questa view 
        //(elemento 'section.login-wrapper') inneschiamo l'animazione di uscita
        _this.$el.addClass("hidden");        
        //al termine della'animazione, rimuoviamo l'oggetto DOM dal documento tramite il metodo backbone 'remove()', in modo da alleggerire il lavoro 
        //della memoria centrale del dispositivo, contribuendo a rendere la nostra applicazione più fluida e performante 
        _this.$el.on( this.AnimEndEventName, function(){
            _this.remove();
            //se è stata passata una funzione di callback, la richiamo una volta terminato l'evento di fine animazione
            if(callback)
                callback();

        });   
    }

});</pre><p>
Nel momento in cui si verifica l&#8217;evento <em>submit</em> del <em>form </em>di login, viene richiamato il metodo &#8220;<em>login</em>&#8220;, all&#8217;interno del quale, dopo aver verificato che username e password siano stati inseriti, simuliamo una richiesta al server con un <em>setTimeout </em> di 2 secondi, durante il quale cambiamo il testo del pulsante di login.</p>
<p>Al termine dei due secondi salviamo in corrispondenza della chiave &#8220;<em>user</em>&#8221; del <em>localStorage </em>l&#8217;username fornito dall&#8217;utente, mediante <strong>il metodo &#8220;.setItem()&#8221; </strong>e richiamiamo la funzione<strong> &#8220;<em>showList&#8221;, </em></strong>che inizializzerà e mostrerà all&#8217;utente la <em>view</em> principale, quella che contiene la lista degli articoli (<em>StartView</em>)<strong><em> </em>.</strong></p>
<p>Come la <em>view</em> principale, anche quella di login utilizza come contenitore il tag <em>&lt;section&gt; </em>con con la classe &#8220;.<em>page-wrapper</em>&#8220;; in più è stata aggiunta la classe &#8220;<em>login-wrapper</em>&#8221; in modo da poter attribuire a questa view degli stili CSS aggiuntivi.</p>
<p>Grazie ad essi potremo infatti mostrare la <em>view</em> con un&#8217;animazione fluida e performante di tipo <em>slideIn</em> dal basso verso l&#8217;alto, che sfrutta la <strong>tecnica dell&#8217;accelerazione hardware.</strong></p>
<p><em>Se vuoi approfondire il discorso delle animazioni fluide e perfomanti, e quello della tecnica dell&#8217;accelerazione hardware, forse potrebbe interessarti il seguente articolo:</em></p>
<ul>
<li><a title="Web e Mobile App fluide con hardware acceleration" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/"><em>Web e Mobile App fluide con hardware acceleration</em></a></li>
</ul>
<hr />
<p><em>Come creare la view di login in un #HTML5 #mobileapp con #backbonejs</em><br /><a href='https://twitter.com/share?text=Come+creare+la+view+di+login+in+un+%23HTML5+%23mobileapp+con+%23backbonejs&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/' target='_blank'>Click To Tweet</a></p>
<hr />
<p>Inoltre sono da sottolineare i due metodi &#8220;<em>show</em>&#8221; e &#8220;<em>hide</em>&#8220;, i quali aggiungono all&#8217;elemento contenitore della <em>view</em> (l&#8217;elemento DOM &#8220;<em>section.login-wrapper&#8221;</em>) le classi &#8220;<em>opened</em>&#8221; ed &#8220;<i>hidden</i>&#8220;, che scateno le animazioni CSS di entrata e di uscita.</p>
<p>Grazie a Modernizr, incluso nel documento all&#8217;interno del file <em>index.html (</em>nel tag<em> &lt;head&gt;)</em>, riusciamo ad &#8220;agganciare&#8221; all&#8217;evento di fine animazione (il cui nome cambia a seconda del browser utilizzato dall&#8217;utente) una funzione nel momento in cui l&#8217;animazione definita nei CSS giunge al termine (vedi <a href="http://www.yourinspirationweb.com/2014/01/24/html5-mobile-app-transizioni-e-animazioni-css3-parte-2/">questo articolo</a> per avere maggiori informazioni).</p>
<h3>Gli stili CSS</h3>
<p>Vediamo gli stili CSS3 utilizzati per definire la dinamica dell&#8217;animazione di entrata e di uscita della schermata di login:</p><pre class="crayon-plain-tag">/* codice CSS3 performante per l'animazione della view di login */

section.login-wrapper {

  /*stili per il posizionamento*/
  position: fixed;
  left: 0;
  top: 0;      
  right: 0;    
  bottom:0;  
  z-index: 30;

  visibility: hidden;

  /* migliora le prestazioni prevenendo il render della parte 'posteriore' dell'elemento */
  -webkit-backface-visibility: hidden;
  -moz-backface-visibility: hidden;
  -ms-backface-visibility: hidden;
   backface-visibility: hidden;

   /* 
   	forziamo l'utilizzo della tecnica dell'accelerazione hardware per avere aniamzioni più fluide e reattive;
   	mpostando come elemento scatenante per l'effetto la proprietà 'translate3d'
   	il processo di rendering per l'elemento sarà delegato alla GPU (memoria grafica) 
   	prima, dopo e durante l'animazione
   */
   -webkit-transform: translate3d(0,0,0);
   -moz-transform: translate3d(0,0,0);
   -ms-transform: translate3d(0,0,0);
   transform: translate3d(0,0,0);               
}    

section.login-wrapper.opened{

	/*
	nel momento in cui all'elemento 'section.article-wrapper' viene aggiunta la classe 'show-article'
	innescchiamo l'animazione di entrata specifcandola in corrispondenza dell'attributo 'animation'
	*/

    -webkit-animation: showFromBottom .25s ease both;
    -moz-animation: showFromBottom .25s ease both;
    animation: showFromBottom .25s ease both;

    visibility: visible;
}

section.login-wrapper.hidden{
    /*
      nel momento in cui all'elemento 'section.article-wrapper' viene aggiunta la classe 'hide-article'
      inneschiamo l'animazione di uscita specificandola in corrispondenza dell'attributo 'animation'
    */
    -webkit-animation: hideToBottom .25s ease both;
    -moz-animation: hideToBottom .25s ease both;
    animation: hideToBottom .25s ease both;
}

/* definizione delle animazioni di entrata e di uscita per la view dell'articolo: muoviamo sempliemente l'elemento in verticale sull'asse delle ordinate */

/*animazione di entrata*/
@-webkit-keyframes showFromBottom {
    from { -webkit-transform: translateY(100%); }
}
@-moz-keyframes showFromBottom {
    from { -moz-transform: translateY(100%); }
}
@keyframes showFromBottom {
    from { transform: translateY(100%); }
}

/*animazione di uscita*/
@-webkit-keyframes hideToBottom {
    to { -webkit-transform: translateY(100%); }
}
@-moz-keyframes hideToBottom {
    to { -moz-transform: translateY(100%); }
}
@keyframes hideToBottom {
    to { transform: translateY(100%); }
}</pre><p>
La dinamica e le caratteristiche delle animazioni sono state riprese da uno dei miei precedenti tuorial sull&#8217;argomento. Per avere maggiori informazioni visita il relativo link:</p>
<ul>
<li><a title="Come creare un HTML5 Mobile App con Backbone.js" href="http://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/">Come creare un HTML5 Mobile App con Backbone.js</a></li>
</ul>
<h3>Il template</h3>
<p>Come prima cosa aggiungiamo il template della view all&#8217;interno del tag <em>&lt;body&gt;</em> file <em>index.html, </em>dove sono già presenti quelli della view principale, delle view della lista e della view dell&#8217;articolo singolo:</p><pre class="crayon-plain-tag">&lt;!-- template per la view del login  (LoginView su demo.js) --&gt;
	&lt;script type="text/template" id="loginview-template"&gt;

		&lt;header class="bar bar-nav"&gt;
			&lt;button class="btn btn-link btn-nav pull-left" onclick="window.location.href='http://www.upcreative.net/iscriviti-alla-newsletter/'"&gt;
			    Altre guide
			&lt;/button&gt;
		    &lt;h1 class="title"&gt;Ultimi Articoli&lt;/h1&gt;
		    &lt;button class="btn btn-link btn-nav pull-right" onclick="window.location.href='http://www.upCreative.net'"&gt;
			    upCreative.net
			&lt;/button&gt;
		&lt;/header&gt;
		&lt;div class="content"&gt;
			&lt;h3&gt;Effettua il login&lt;/h3&gt;
			&lt;form&gt;
			  &lt;input type="text" name="username" placeholder="Username"&gt;
			  &lt;input type="password" name="password" placeholder="Password"&gt;
			  &lt;button class="btn btn-primary btn-block"&gt;Login&lt;/button&gt;
			&lt;/form&gt;
		&lt;/div&gt;

	&lt;/script&gt;</pre><p>
Anche questa <em>view</em>, come le altre, è stata realizzata in modo tale che sfrutti gli stili di <a href="http://goratchet.com/">Ratchet 2</a>, un set di CSS pronti da utilizzare come base per la realizzazione di una mobile app.</p>
<p>Al suo interno abbiamo inserito un semplice <em>form</em> di login con 2 campi per username e password.</p>
<h2>Come creare un app: il controllo del login</h2>
<p>Nell&#8217;esperimento precedente, dove il login non era presente, ci preoccupavamo subito di inizializzare la <em>view</em> princiaple; in questo tutorial dobbiamo invece controllare il contenuto della variabile <em>localStorage</em> per la chiave &#8220;<em>user</em>&#8221; prima di decidere se mostrare all&#8217;utente la <em>view</em> di login piuttosto che quella della lista degli articoli.</p>
<hr />
<p><em>Come creare la view di login in un #HTML5 #mobileapp con #backbonejs</em><br /><a href='https://twitter.com/share?text=Come+creare+la+view+di+login+in+un+%23HTML5+%23mobileapp+con+%23backbonejs&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/' target='_blank'>Click To Tweet</a></p>
<hr />
<p>Pertanto inseriamo l&#8217;inizializzazione della <em>view </em>di iniziale (<em>StartView</em>) all&#8217;interno di una funzione denominata &#8220;<em>showList</em>&#8220;, in modo da poterla richiamare inizialmente oppure dopo che l&#8217;utente ha effettuato correttamente l&#8217;operazione di login:</p><pre class="crayon-plain-tag">//per poter inizializzaere e mostrare la view della lista degli articoli in più parti dell'applicazione
//la inseriamo all'interno di una funzione globale

var showList = function(){
    //creiamo una nuova istanza per la collection degli articoli con 4 models iniziali
    var articles = new ArticleList([
        {
            title: "App su upCreative.net",
            image: "1.jpg",
            article: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
        },
        {
            title: "Secondo articolo su upCreative.net",
            image: "2.jpg",
            article: "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur"
        },
        {
            title: "Articolo senza immagine 3",
            image: "3.jpg",
            article: "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat"
        },
        {
            title: "Quarto articolo sulla  lista",
            image: "4.jpg",
            article: "Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat"
        },
        {
            title: "Quinto articolo sulla  lista",
            image: "5.jpg",
            article: "Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat"
        },
        {
            title: "Sesto articolo sulla  lista",
            image: "1.jpg",
            article: "Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat"
        },
        {
            title: "Settimo articolo sulla  lista",
            image: "2.jpg",
            article: "Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat"
        }
    ]);
    //creiamo una nuova istanza per la view iniziale 
    //associandogli la collection appena creata e popolata
    var startView = new StartView({
        collection : articles
    });
    $("body").append(startView.render().el);
};</pre><p>
Una volta fatto ciò, non dovremo far altro che controllare la variabile &#8220;<em>user</em>&#8221; all&#8217;interno del <em>localStorage</em>, nel momento in cui l&#8217;applicazione viene lanciata:</p><pre class="crayon-plain-tag">$(function(){

    //riprendo il contenuto della variabile "user" del localStorage
    var user = window.localStorage.getItem("user");

    if(user){
        //se in localStorage è presente un oggetto in corrispondenza della chiave "user", 
        //allora significa che l'utente è già loggato, quindi mostriamo direttamente la view della lista degli articoli
        showList();
    }else{
        //se l'utente non è loggato (quindi il contenuto della variabile è vuoto), allora mostriamo la view di login
        var loginView = new LoginView();
        $("body").append(loginView.render().el);
        loginView.show();
    }

});</pre><p>
<h3>Come creare un app: il pulsante di logout</h3>
<p>Una volta predisposti la <em>view</em> di login ed il controllo della sessione tramite <em>localStaorage</em>, è buona norma aggiungere un pulsante per <strong>effettuare il logout</strong>, in modo da dare la possibilità all&#8217;utente di riaccedere con un username differente.</p>
<p>Inseriamo quindi nel template della <em>view</em> <em>&#8220;StartView&#8221;</em> un footer contenente il nuovo pulsante:</p><pre class="crayon-plain-tag">&lt;!-- template per la view del contenuto iniziale  (StartView su demo.js) --&gt;
	&lt;script type="text/template" id="startview-template"&gt;

		&lt;header class="bar bar-nav"&gt;
			&lt;button class="btn btn-link btn-nav pull-left" onclick="window.location.href='http://www.upcreative.net/iscriviti-alla-newsletter/'"&gt;
			    Altre guide
			&lt;/button&gt;
		    &lt;h1 class="title"&gt;Ultimi Articoli&lt;/h1&gt;
		    &lt;button class="btn btn-link btn-nav pull-right" onclick="window.location.href='http://www.upCreative.net'"&gt;
			    upCreative.net
			&lt;/button&gt;
		&lt;/header&gt;
		&lt;div class="bar bar-standard bar-header-secondary"&gt;
		    &lt;input class="search-term" placeholder="Cerca articoli" type="text"/&gt;
		&lt;/div&gt;
		&lt;div class="content"&gt;
			&lt;div class="info"&gt;
				&lt;h4&gt;Benvenuto/a "&lt;%=username%&gt;"&lt;/h4&gt;
				&lt;p&gt;Prova ad aggiornare la pagina, il login non verrà richiesto, a meno che non venga effettuato il logout. ;) &lt;/p&gt;
			&lt;/div&gt;
		&lt;/div&gt;

		&lt;!-- Footer con il pulsante di logout --&gt;
		&lt;div class="bar bar-standard bar-footer"&gt;
		  &lt;button class="btn btn-primary btn-block logout"&gt;Logout&lt;/button&gt;		 
		&lt;/div&gt;

	&lt;/script&gt;</pre><p>
Il click (o tap) su di esso sarà poi gestito all&#8217;interno della <em>view </em>di Backbone:</p><pre class="crayon-plain-tag">var StartView = Backbone.View.extend({

    ...

    // Deleghiamo gli eventi per la ricerca sull'input di testo 
    events: {
        ...
        "click    .logout":      "logout"  //gestione del pulsante di logout
    },

    ...

    logout: function(){

        var _this = this;

        //azzero la variabile del lovalStorage
        window.localStorage.removeItem("user");

        //mostro di unovo la view di login, per poi rimuovere questa view
        var loginView = new LoginView();
        $("body").append(loginView.render().el);
        loginView.show(function(){
            _this.remove();
        });

    }
});</pre><p>
Come puoi vedere dal codice, il compito del metodo  &#8220;<em>logout</em>&#8221; è quello di azzerare la variabile di controllo di login e mostrare la <em>view</em> &#8220;<em>LoginView</em>&#8220;, per poi rimuovere quella corrente al termine dell&#8217;animazione di entrata (passando al metodo &#8220;<em>show</em>&#8220;, definito nella <em>view </em>di login, una funzione di <em>callback</em>).</p>
<h2>Il risultato finale</h2>
<hr />
<p><em>Come creare la view di login in un #HTML5 #mobileapp con #backbonejs</em><br /><a href='https://twitter.com/share?text=Come+creare+la+view+di+login+in+un+%23HTML5+%23mobileapp+con+%23backbonejs&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/' target='_blank'>Click To Tweet</a></p>
<hr />

		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<div style="background-image: url('http://www.upcreative.net/wp-content/uploads/2014/03/iphone5.png'); background-repeat: no-repeat; margin: 0 auto; padding: 145px 0px 0px 27px; width: 375px; height: 690px;"><iframe width="320" height="550" src="http://www.upcreative.net/tutorials/28052014_HTML5-Mobile-App-login/"></iframe></div>

		</div> 
	</div> <div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/28052014_HTML5-Mobile-App-login/" target="_blank"class="g-btn type_primary"><span>Apri DEMO in una nuova finestra</span></a></div>
<div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2>Download dei sorgenti</h2>
<h4>Aiutami a condividere la risorsa per ottenere il <strong>download</strong>:</h4>

		</div> 
	</div> <div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div><div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando questa tecnica insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6acc0756aac5b-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6acc0756aac5b-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/">Come creare un app: realizzare una view di login con il localStorage</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Search form con animazione CSS3 per HTML Mobile App</title>
		<link>https://www.upcreative.net/search-form-con-animazione-css3-per-html-mobile-app/</link>
		<comments>https://www.upcreative.net/search-form-con-animazione-css3-per-html-mobile-app/#comments</comments>
		<pubDate>Wed, 08 Jan 2014 08:53:11 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[animazioni]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[mobile app]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=2966</guid>
		<description><![CDATA[<p>Articolo-tutorial che ho scritto per gli amici di LaboratorioCSS.it su come realizzare un'animazione CSS3 fluida su una search form per riprodurre l'effetto dell'applicazione mobile di Gmail, in modo da ottimizzare lo spazio per i risultati della ricerca.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/search-form-con-animazione-css3-per-html-mobile-app/">Search form con animazione CSS3 per HTML Mobile App</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Oltre che realizzare interfacce semplici ed intuitive, per creare un&#8217;ottima <em>user-experience</em> bisogna rendere la nostra applicazione anche <strong>comoda </strong>per l&#8217;utente. Innumerevoli sono le tecniche per raggiungere questo obiettivo, e nell&#8217;ambito di HTML Mobile App, una fra queste è sicuramente quella di ottimizzare lo spazio in cui vengono mostrati gli elementi di una lista.</p>
<p>E&#8217; quello che fa per esempio l&#8217;applicazione di <a title="Applciazione mobile Gmail per iPhone" href="https://itunes.apple.com/it/app/gmail/id422689480?mt=8">Gmail per iPhone</a>, dove se viene selezionato il campo di testo per la ricerca nella casella mail, questo si sposta verticalmente posizionandosi al posto della <em>navbar</em>, che allo stesso tempo modifica anch&#8217;essa la sua posizione verticalmente per uscire dallo schermo.</p>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="930" height="500" src="http://www.upcreative.net/wp-content/uploads/2014/01/aniumazione-CSS3-su-searchbox-html-mobile-app.jpg" class="attachment-full" alt="aniumazione-CSS3-su-searchbox-html-mobile-app" />
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>In questo modo è possibile ottimizzare lo spazio per la visualizzazione dei risultati, espandendolo di circa 45 pixel (l&#8217;altezza della <em style="line-height: 1.5em;">navbar</em><span style="line-height: 1.5em;">), che in un dispositivo mobile possono fare la differenza.</span></p>
<h2>Riproduciamo l&#8217;effetto con un&#8217;animazione CSS3 performante</h2>
<p>A tal proposito in questo articolo voglio segnalarti un tutorial che ho scritto per gli amici di <a title="LaboratorioCSS.it - Blog sulle tecniche dei CSS" href="http://www.laboratoriocss.it">LaboratorioCSS.it</a>, atto a riprodurre lo stesso effetto in <strong>HTML5</strong> e <strong>CSS3</strong>, il tutto utilizzando animazioni fluide e performanti (ti consiglio di leggere <a title="animazioni CSS3 - consigli per ottimizzare le prestazioni" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">questo articolo a proposito delle prestazioni</a>).</p>

		</div> 
	</div> <div class="wpb_button align_center"><a href="http://www.laboratoriocss.it/animazione-css3-su-search-form-in-stile-gmail-mobile-app.html"class="g-btn type_primary size_big"><span>Clicca qui per vedere il tutorial su laboratorioCSS </span></a></div>
<div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div><div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando questa tecnica insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong></p>

		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/search-form-con-animazione-css3-per-html-mobile-app/">Search form con animazione CSS3 per HTML Mobile App</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/search-form-con-animazione-css3-per-html-mobile-app/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSS3 Tutorial: Come creare un effetto overlay iOS 7 blur</title>
		<link>https://www.upcreative.net/css3-tutorial-creare-effetto-overlay-ios-7-blur/</link>
		<comments>https://www.upcreative.net/css3-tutorial-creare-effetto-overlay-ios-7-blur/#comments</comments>
		<pubDate>Mon, 30 Sep 2013 17:48:21 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[blur]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[iOS 7]]></category>
		<category><![CDATA[stili]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=1889</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="https://www.upcreative.net/css3-tutorial-creare-effetto-overlay-ios-7-blur/">CSS3 Tutorial: Come creare un effetto overlay iOS 7 blur</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Recentemente è stata rilasciata la versione definitiva del tanto atteso sistema operativo <a title="iOS 7 operating system" href="http://www.upcreative.net/tag/ios-7/"><strong>iOS 7</strong></a>  targato <a title="Apple" href="http://www.apple.com">Apple</a>, con il suo design flat, le nuove icone e tutto il bagaglio di innovazioni presentate da Tim Cook durante il <a href="http://www.apple.com/apple-events/september-2013/">Keynote tenutosi a Settembre</a> 2013. Uno degli aspetti principali che caratterizza il design si iOS 7 è determinato dall&#8217;uso costante dell&#8217;<strong>effetto blur,</strong> impiegato sui vari background che compongono l&#8217;interfaccia utente.</p>
<p>In questo articolo cercheremo di riprodurre questo effetto tramite l&#8217;esclusivo utilizzo di funzioni <a title="CSS3" href="http://www.upcreative.net/tag/css3/"><strong>CSS3</strong></a> avanzate, senza usare alcun tipo di immagine. Il risultato dell&#8217;esperimento sarà quello di creare una pagina con una barra di navigazione contenente un pulsante che servirà ad attivare il nostro overlay, ed un altro, contenuto all&#8217;interno dello stesso overlay, che avrà il compito di disattivarlo. L&#8217;obiettivo di quest&#8217;ultimo è quello di apparire con effetto slide sopra il contenuto del documento.</p>
<p><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2013/09/CSS3-Tutorial-Come-creare-un-effetto-overlay-iOS-7-blur.jpg"><img class="alignnone size-full wp-image-1895" alt="CSS3-Tutorial--Come-creare-un-effetto-overlay-iOS-7-blur" src="http://www.upcreative.net/wp-content/uploads/2013/09/CSS3-Tutorial-Come-creare-un-effetto-overlay-iOS-7-blur.jpg" width="690" height="340" /></a></p>

		</div> 
	</div> </div></div><div class="g-cols"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/30092013-CSS3-overlay-iOS-7-blur/"class="g-btn type_primary size_big"><span><i class="fa fa-icon-eye-open"></i>Demo</span></a></div>
 
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="wpb_button align_center"><a href="http://www.upcreative.net/download/1898/"class="g-btn type_primary size_big"><span><i class="fa fa-icon-download-alt"></i>Download</span></a></div>
 
		</div> 
	</div> </div></div><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Il markup HTML</h3>
<p>Come primo passaggio creiamo il nostro markup html, comprensivo della barra di navigazione, del contenuto della pagina, e della div di overlay:</p><pre class="crayon-plain-tag">&lt;nav&gt;
		&lt;h1 class="title"&gt;Overlay Blur effect&lt;/h1&gt;
		&lt;button class="open-overlay"&gt;Show&lt;/a&gt;
	&lt;/nav&gt;
	&lt;article&gt;

		&lt;ul class='list'&gt;
			&lt;li class="show-detail"&gt;
				&lt;img src="img/1.jpg" height="80px"&gt;
				&lt;div&gt;
					&lt;h3&gt;Lorem ipsum&lt;/h3&gt;
					&lt;h4&gt;Radioactive&lt;/h4&gt;
					&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt.&lt;/p&gt;
				&lt;/div&gt;
			&lt;/li&gt;
			&lt;li class="show-detail"&gt;
				&lt;aside&gt;
					&lt;img src="img/2.jpg" height="80px"&gt;
				&lt;/aside&gt;
				&lt;div&gt;
					&lt;h3&gt;Lorem ipsum&lt;/h3&gt;
					&lt;h4&gt;Radioactive&lt;/h4&gt;
					&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt.&lt;/p&gt;
				&lt;/div&gt;
			&lt;/li&gt;
			&lt;li class="show-detail"&gt;
				&lt;aside&gt;
					&lt;img src="img/3.jpg" height="80px"&gt;
				&lt;/aside&gt;
				&lt;div&gt;
					&lt;h3&gt;Lorem ipsum&lt;/h3&gt;
					&lt;h4&gt;Radioactive&lt;/h4&gt;
					&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt.&lt;/p&gt;
				&lt;/div&gt;
			&lt;/li&gt;
			&lt;li class="show-detail"&gt;
				&lt;aside&gt;
					&lt;img src="img/4.jpg" height="80px"&gt;
				&lt;/aside&gt;
				&lt;div&gt;
					&lt;h3&gt;Lorem ipsum&lt;/h3&gt;
					&lt;h4&gt;Radioactive&lt;/h4&gt;
					&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt.&lt;/p&gt;
				&lt;/div&gt;
			&lt;/li&gt;
		&lt;/ul&gt;

	&lt;/article&gt;
	&lt;section class="overlay"&gt;

		&lt;button class="close-overlay"&gt;Hide&lt;/a&gt;

	&lt;/section&gt;</pre><p>
&nbsp;</p>
<p>Per fare ciò abbiamo utilizzato elementi <a href="http://www.upcreative.net/tag/html5/">html5</a> come <strong>nav</strong> ed <strong>article</strong>  e <strong>section</strong>, ma è possibile utilizzare  anche altri elementi con attributo css &#8220;<em>display:block</em>&#8220;. Abbiamo inoltre inserito all&#8217;interno del <em>tag article, </em>una lista con stili simili ad iOS7 (giusto per rimanere nel tema).</p>
<h3>Il foglio di stile CSS</h3>
<p>Prima di arrivare al passaggio più importante, ovvero attribuire ai vari elementi gli stili necessari per rendere possibile l&#8217;effetto overlay con blur, cerchiamo di dare alla pagina un aspetto che si avvicini più possibile alla grafica di iOS 7:</p><pre class="crayon-plain-tag">body, html{
	height: 100%;
	font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
	font-weight: 100;
	overflow: hidden;
}

nav {
  top: 0;
  height: 44px;
  padding:0;	  	  
  background-color: #F7F7F7;
  border-bottom: 1px solid #A7A7AA;	  	  
  position: relative;  
}	
nav .title {
  position: absolute;
  top: 0;
  left: 0;
  display: block;
  margin:0;
  width: 100%;
  font-size: 18px;
  font-weight: 100;
  line-height: 44px;
  color: #333;
  text-align: center;
  white-space: nowrap;
}

nav .title + button {
  position: absolute; 
  top: 5px;
  right: 5px;
  z-index: 10; 

  border-radius:4px;
  padding:6px 8px;
  border:none;	
  color: #397AFC;
  background: transparent;	  
}
nav .title + button:active{
	color: #7BB6FB;
}

article {
  position: fixed;
  top: 45px;
  right: 0;
  bottom: 0;
  left: 0;
  overflow: auto;
  background: #EFEFF4;
  padding-top:20px;
}

.list {
   list-style: none;
   margin: 0 0 10px 0;
   padding: 0;
   border-top: solid 1px #c8c8c8;
   border-bottom: solid 1px #c8c8c8;
   background-color: #fff;
   overflow: hidden;
   width: 100%;
}

.list &gt; li {
   padding: 13px 15px 13px 15px;
   -webkit-transition: all .3s ease-out;
   -moz-transition: all .3s ease-out;
   transition: all .3s ease-out;
   position: relative;
   background-color: #fff;
   font-size: 12pt;
}
.list img{
	float:left;
	margin: 0 10px 10px 0;
}
.list h3,
.list h4,
.list p{
	font-size: 0.9em;
	margin:5px 0;
}

.list &gt; li::before {
   content: '';
   display: block;
   position: absolute;
   bottom: 0px;
   left: 15px;
   right: 0px;
   border-bottom: solid 1px #c8c8c8;
}

.list &gt; li.show-detail::after {
   content: 'i';
   display: block;
   height: 20px;
   width: 22px;
   border-radius: 20px;
   border: solid 1px #007aff;
   color: #007aff;
   font: bold 14px/0 'Times', serif;
   -webkit-box-sizing: border-box;
   -moz-box-sizing: border-box;
   box-sizing: border-box;
   padding: 10px 8px;
   position: absolute;
   top: 10px;
   right: 15px;
}</pre><p>
Applicando questa porzione di codice abbiamo attribuito al documento il font &#8220;<strong>HelveticaNeue Light</strong>&#8220;, tipico del flat design targato Apple, abbiamo posizionato e &#8220;stilizzato&#8221; la barra di navigazione e gli elementi in essa contenuti (come titolo e pulsante d&#8217;azione) ed infine abbiamo posizionato il corpo della pagina, costituito appunto dal tag &#8220;<em>article</em>&#8220;.</p>
<p>Passiamo invece agli stili CSS che caratterizzano il risultato del nostro esperimento:  aggiungiamo la proprietà &#8220;<a href="http://www.w3schools.com/css3/css3_transitions.asp"><strong>transition</strong></a>&#8221; all&#8217;elemento article, specificando che sia applicata all&#8217;attributo <strong>filter</strong>.</p><pre class="crayon-plain-tag">article {
  position: fixed;
  top: 45px;
  right: 0;
  bottom: 0;
  left: 0;
  overflow: auto;
  background: #EFEFF4;
  padding-top:20px;

  -webkit-transition: -webkit-filter .15s ease;
          		  transition: filter .15s ease;
}</pre><p>
&nbsp;</p>
<p>Poi aggiungiamo un blur di 15 px al contenuto della pagina nel caso in cui il body abbia la classe &#8220;<em>open-overlay</em>&#8220;, rimuovendolo invece nel caso in cui abbia la classe &#8220;<em>close-overlay</em>&#8220;.</p><pre class="crayon-plain-tag">body.open-overlay article{
	-webkit-filter:blur(15px);
	filter: blur(15px);
}

body.close-overlay article{
	-webkit-filter:none;
	filter:none;
}</pre><p>
&nbsp;</p>
<p>Ora l&#8217;elemento più importante: l&#8217;overlay. Attribuiamo al nostro overlay (tag section) una posizione assoluta nei confronti del documento e posizioniamolo in modo tale che non copra la barra di navigazione, poi aggiungiamo le altre proprietà fondamentali:</p>
<ol>
<li>L&#8217;attributo <em>visibility:hidden, </em>perchè nello &#8220;stato normale&#8221; l&#8217;overlay non deve essere visibile</li>
<li>L&#8217;attributo <em>backface-visibility:hidden</em> (nei suoi adattamenti per la compatibilità dei vari browser): con il quale miglioriamo le prestazioni di rendering nel caso di trasformazioni CSS prevenendo quest&#8217;ultimo dall&#8217;essere eseguito per la parte posteriore dell&#8217;elemento</li>
<li>L&#8217;attributo<em> transform:translate3d(0,0,0) </em>con il quale <strong>miglioriamo la fluidità della nostra animazione</strong> &#8220;<strong>forzando&#8221; l&#8217;utilizzo della GPU</strong></li>
<li>L&#8217;attributo &#8220;<em>animatior</em>&#8220;, con il quale comunichiamo all&#8217;overlay quale genere di animazione eseguire, quanto tempo deve durare, e che tipo di &#8220;andamento&#8221; eseguire (lineare, swing ecc.)</li>
<li>L&#8217;istruzione &#8220;<strong><a href="http://www.w3schools.com/css3/css3_animations.asp"><em>keyframe</em></a>&#8220;, </strong>con la quale definiamo le animazioni</li>
</ol>
<pre class="crayon-plain-tag">section {
  position: absolute;
  left: 0;
  top: 44px;	  
  right: 0;	
  bottom:0;  
  background-color: rgba(156,159,164,.5);	  
  padding:20px;
  text-align: center;

  visibility: hidden;

  /* migliora le prestazioni prevenendo il render della parte 'posteriore' dell'elemento */
  -webkit-backface-visibility: hidden;
  -moz-backface-visibility: hidden;
  -ms-backface-visibility: hidden;
   backface-visibility: hidden;

   /* accelerazione hardware */
   -webkit-transform: translate3d(0,0,0);
   -moz-transform: translate3d(0,0,0);
   -ms-transform: translate3d(0,0,0);
   transform: translate3d(0,0,0);			   
}	

body.open-overlay section{
	-webkit-animation: showFromBottom .25s ease both;
	-moz-animation: showFromBottom .25s ease both;
	animation: showFromBottom .25s ease both;

	visibility: visible;
}

body.close-overlay section{
	-webkit-animation: hideToBottom .25s ease both;
	-moz-animation: hideToBottom .25s ease both;
	animation: hideToBottom .25s ease both;
}

/* definizione delle animzioni dell'overlay  */

	@-webkit-keyframes showFromBottom {
		from { -webkit-transform: translateY(100%); }
	}
	@-moz-keyframes showFromBottom {
		from { -moz-transform: translateY(100%); }
	}
	@keyframes showFromBottom {
		from { transform: translateY(100%); }
	}

	@-webkit-keyframes hideToBottom {
		to { -webkit-transform: translateY(100%); }
	}
	@-moz-keyframes hideToBottom {
		to { -moz-transform: translateY(100%); }
	}
	@keyframes hideToBottom {
		to { transform: translateY(100%); }
	}</pre>
Apro una piccola parentesi in merito: devo dire che mi piace molto utilizzare la terza delle proprietà elencate, che permette, nel caso di dispositivi mobile, di raggiungere o perlomeno di avvicinarsi alle prestazioni delle applicazioni native.</p>
<p>Tornando a noi, vediamo come nel caso in cui il body abbia la classe &#8220;<em>open-overlay</em>&#8221; o &#8220;<em>close-overlay</em>&#8220;, il tag section debba eseguire le due animazioni rispettivamente di comparsa e scomparsa dichiarate sotto il codice &#8220;<em><strong>keyframes</strong></em>&#8221; : <strong>showFromBottom</strong> e <strong>hideToBottom</strong>. Abbiamo inoltre modificato l&#8217;attributo &#8220;<em>visibility:visible</em>&#8221; per rendere visibile il pannello.</p>
<p>Il risultato dovrebbe quindi essere il seguente:</p>
<ol>
<li>Nel caso di un body con classe &#8220;open-overlay&#8221; dovremmo vedere l&#8217;animazione dell&#8217;overlay assieme a quella del blur del documento.</li>
<li>Nel caso di un body con classe &#8220;close-overlay&#8221; dovremmo vedere esattamente le due animazioni opposte, per poi tornare allo stato iniziale.</li>
</ol>
<p>Passiamo quindi all&#8217;ultima parte.</p>
<h3>Il codice Javascript</h3>
<p>Per scrivere meno righe di javascript, incorporiamo nel documento due librerie: jQuery e Modernizr, rispettivamente per effettuare il bind degli eventi del click dei pulsanti di apertura e chiusura, e per ricavare il nome dell&#8217;evento di fine animazione, che varia a seconda del browser.</p><pre class="crayon-plain-tag">var endAnimationName = {
	'WebkitAnimation' : 'webkitAnimationEnd',
	'OAnimation' : 'oAnimationEnd',
	'msAnimation' : 'MSAnimationEnd',
	'animation' : 'animationend'
};
var animationName = endAnimationName[ Modernizr.prefixed( 'animation' ) ];

$(function(){
   //bind dell'evento click sul pulsante di attivazione 
   $("button.open-overlay").on("click", function(){
	   $("body").addClass("open-overlay");
   });
   $("button.close-overlay").on("click", function(){
	   $("body").addClass("close-overlay").on(animationName, function(){				   
		   $(this).off(animationName)
		   .removeClass("open-overlay close-overlay");
	   });
   });
});</pre><p>
Alla fine dell&#8217;animazione di chiusura, togliamo al body entrambe le classi &#8220;open-overlay&#8221;  e &#8220;close-overlay&#8221;, per ritornare così allo stato di partenza.</p>
<h3>Conclusioni finali</h3>
<p>Purtroppo questo esperimento non è ancora ottimizzato con tutti i browser (per esempio nel caso di Firefox non è possibile applicare l&#8217;effetto blur al contenuto della pagina con il semplice attributo &#8220;<em>filter:blur</em>&#8221; ma solo servendosi degli <strong>effetti svg</strong>) e inoltre si tratta in fin dei conti di un workaround, in quanto l&#8217;effetto sul documento non è scaturito dalla sovrapposizione dell&#8217;overlay bensì da uno stile completamente separato. Tuttavia spero che questo tutorial ti sia d&#8217;aiuto per imparare nuove regole CSS3 e che magari potrai utilizzarlo nel tuo prossimo progetto!</p>

		</div> 
	</div> </div></div><div class="g-cols"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/30092013-CSS3-overlay-iOS-7-blur/"class="g-btn type_primary size_big"><span><i class="fa fa-icon-eye-open"></i>Demo</span></a></div>
 
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="wpb_button align_center"><a href="http://www.upcreative.net/download/1898/"class="g-btn type_primary size_big"><span><i class="fa fa-icon-download-alt"></i>Download</span></a></div>
 
		</div> 
	</div> </div></div><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2>Crea la tua mobile app in HTML, CSS3 e Javascript</h2>
<p>Utilizzando questa tecnica unita a molte altre ho creato per i miei clienti oltre 10 applicazioni per dispositivi mobile, tra cui due progetti personali: <a title="Tint Weather App - HTML, CSS3 e javascript mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint Weather App</a> e <a title="Dieta SI o NO? - HTML, CSS3 e javascript mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>. Se anche tu sei un web designer e vuoi realizzare la tua applicazione mobile da distribuire nei vari stores, forse sarai interessato al mio e-book: <a title="Html Mobile Accelerato - Come realizzare HTML Mobile App fluide e preformanti" href="http://www.upcreative.net/html-mobile-accelerato/"><strong>HTML Mobile Accelerato</strong></a>.</p>
<p>Grazie ad esso verrai a conoscenza di tutte quelle tecniche che renderanno la tua applicazione mobile fluida e reattiva come quelle native.</p>

		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>I am text block. Click edit button to change this text.</p>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" />
		</div> 
	</div> </div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/css3-tutorial-creare-effetto-overlay-ios-7-blur/">CSS3 Tutorial: Come creare un effetto overlay iOS 7 blur</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/css3-tutorial-creare-effetto-overlay-ios-7-blur/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Twitter Bootstrap 3 autocomplete &#8211; come realizzarlo con JQuery UI</title>
		<link>https://www.upcreative.net/twitter-bootstrap-3-autocomplete-con-jquery-ui/</link>
		<comments>https://www.upcreative.net/twitter-bootstrap-3-autocomplete-con-jquery-ui/#comments</comments>
		<pubDate>Mon, 09 Sep 2013 17:05:39 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[autocomplete]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[stili]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[twitter bootstrap]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=1609</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="https://www.upcreative.net/twitter-bootstrap-3-autocomplete-con-jquery-ui/">Twitter Bootstrap 3 autocomplete &#8211; come realizzarlo con JQuery UI</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Tutti i designer e gli sviluppatori web hanno utilizzato o perlomeno conoscono gli utilissimi widget di <a title="jQuery UI" href="http://jqueryui.com">jQuery UI</a>. In questo articolo voglio parlarvi di come personalizzare gli stili ed il markup del widget <a title="jQuery UI automplete widget" href="http://jqueryui.com/autocomplete/">autocomplete</a>, che pur essendo uno dei plugin più completi, presenta un aspetto al quanto obsoleto. Cercheremo in particolare di realizzare un <a title="Twitter Bootstrap" href="http://getbootstrap.com">twitter bootstrap 3 autocomplete</a> servendoci del widget di jQuery UI.</p>
<p><img class="alignnone  wp-image-1645" src="http://www.upcreative.net/wp-content/uploads/2013/09/Bootstrap3-jQUeryUI-e1378745985638.jpg" alt="Bootstrap3-jQUeryUI" width="100%" height="auto" /></p>

		</div> 
	</div> </div></div><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/09092013-jquery-autcomplete-bootstrap/"class="g-btn type_primary size_big"><span><i class="fa fa-icon-eye-open"></i>Demo</span></a></div>
 
		</div> 
	</div> </div></div><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Aiutami a condividere la risorsa per ottenere il <strong>download</strong>:</p>

		</div> 
	</div> </div></div><div class="g-cols"><div class="full-width"><div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5>Prima di iniziare</h5>
<p>In alcuni progetti, soprattutto per quelli in cui alcune risorse come il tempo o anche il budget del cliente vengono a mancare, può tornare molto utile servirsi di <strong>temi twitter bootstrap 3 premium</strong>. A tal proposito te ne voglio proporre alcuni di alta qualità che io stesso ho usato per alcuni miei lavori:
		</div> 
	</div> <div class="g-cols"><div class="one-third">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5><a href="http://themeforest.net/item/rioleme-responsive-multipurpose-wordpress-theme/7041517?ref=Colddesign">RioLeme &#8211; Responsive Multi-Purpose WordPress Theme</a></h5>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://themeforest.net/item/rioleme-responsive-multipurpose-wordpress-theme/7041517?ref=Colddesign"><img width="590" height="300" src="http://www.upcreative.net/wp-content/uploads/2013/09/rioleme-preview-image-590x300.__large_preview.jpg" class="attachment-full" alt="rioleme-preview-image-590x300.__large_preview" /></a>
		</div> 
	</div> </div><div class="one-third">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5><a href="http://themeforest.net/item/alamak-responsive-one-page-portfolio-theme/6502151?ref=Colddesign">Alamak &#8211; Responsive One Page Portfolio Theme</a></h5>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://themeforest.net/item/alamak-responsive-one-page-portfolio-theme/6502151?ref=Colddesign"><img width="590" height="300" src="http://www.upcreative.net/wp-content/uploads/2013/09/alamak-preview.__large_preview.jpg" class="attachment-full" alt="alamak-preview.__large_preview" /></a>
		</div> 
	</div> </div><div class="one-third">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5><a href="http://themeforest.net/item/moose-multipurpose-responsive-wordpress-theme/6928835?ref=Colddesign">Moose &#8211; Multipurpose Responsive WordPress Theme</a></h5>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://themeforest.net/item/moose-multipurpose-responsive-wordpress-theme/6928835?ref=Colddesign"><img width="590" height="300" src="http://www.upcreative.net/wp-content/uploads/2013/09/preview.__large_preview.png" class="attachment-full" alt="preview.__large_preview" /></a>
		</div> 
	</div> </div></div><div class="g-cols"><div class="one-third">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5><a href="http://themeforest.net/item/-slowave-multipurpose-responsive-wordpress-theme/6870792?ref=Colddesign">Slowave &#8211; Multipurpose Responsive WordPress Theme</a></h5>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://themeforest.net/item/-slowave-multipurpose-responsive-wordpress-theme/6870792?ref=Colddesign"><img width="590" height="300" src="http://www.upcreative.net/wp-content/uploads/2013/09/1.__large_preview.png" class="attachment-full" alt="1.__large_preview" /></a>
		</div> 
	</div> </div><div class="one-third">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5><a href="http://themeforest.net/item/floyd-one-page-parallax-wordpress-theme/7081098?ref=Colddesign">Floyd &#8211; One Page Parallax WordPress Theme</a></h5>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://themeforest.net/item/floyd-one-page-parallax-wordpress-theme/7081098?ref=Colddesign"><img width="590" height="300" src="http://www.upcreative.net/wp-content/uploads/2013/09/01_preview.__large_preview.png" class="attachment-full" alt="01_preview.__large_preview" /></a>
		</div> 
	</div> </div><div class="one-third">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5><a href="http://themeforest.net/item/nativechurch-multi-purpose-wordpress-theme/7082446?ref=Colddesign">NativeChurch &#8211; Multi Purpose WordPress Theme</a></h5>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://themeforest.net/item/nativechurch-multi-purpose-wordpress-theme/7082446?ref=Colddesign"><img width="590" height="300" src="http://www.upcreative.net/wp-content/uploads/2013/09/preview_image1_large_preview.__large_preview.jpg" class="attachment-full" alt="preview_image1_large_preview.__large_preview" /></a>
		</div> 
	</div> </div></div><div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div></div></div><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h1>Twitter Bootstrap 3 autocomplete: iniziamo!</h1>
<h3>Cosa includere nel documento</h3>
<p>Come prima cosa andremo ad inserire nel nostro documento html le librerie css e javascript necessarie:</p>
<p><strong>CSS:</strong></p>
<ul>
<li>bootstrap.css</li>
<li>demo.css (il nostro foglio di stile)</li>
</ul>
<p><strong>FILE JS:</strong></p>
<ul>
<li>jquery.js (versione 1.10.2)</li>
<li>jquery-ui.js (per l&#8217;autocomplete)</li>
<li>demo.js (il nostro file javascript)</li>
</ul>
<p>Per questo esempio ho escluso tutti i file js del Bootstrap e qualunque tema css del jQuery UI, in quanto il nostro intento è quello di combinare appunto gli stili del primo con le funzionalità del secondo; tuttavia è possibile raggiungere l&#8217;obiettivo anche includendo le due librerie al completo.</p>
<p>I file &#8220;demo.css&#8221; e &#8220;demo.js&#8221; sono rispettivamente il foglio di stile e il javascript del nostro esempio.</p>
<h3>Il markup HTML</h3>
<pre class="crayon-plain-tag">&lt;div class="row"&gt;

	    &lt;div class="col-sm-6 col-md-6 col-md-offset-3"&gt;

		    &lt;form id="search-form" role="form"&gt;
			  &lt;div class="form-group"&gt;
			    &lt;label for="spotlight"&gt;Cerca&lt;/label&gt;
			    &lt;input type="email" class="form-control" id="spotlight" placeholder="Cerca" /&gt;
			  &lt;/div&gt;

		    &lt;/form&gt;

	    &lt;/div&gt;	    

    &lt;/div&gt;</pre>
&nbsp;</p>
<p>Aabbiamo usato un input con id &#8220;spotlight&#8221; all&#8217;interno di un form, il tutto contenuto nella colonna di una griglia Bootstrap, con offset 3 e larghezza 6: il risultato è un campo di testo responsive centrato nel mezzo del documento, sia per dispositivi desktop che  mobile.</p>
<h3>Javascript: demo.js</h3>
<pre class="crayon-plain-tag">$(function() {

    var availableTags = [
      "ActionScript",
      "AppleScript",
      "AppleScript2",
      "AppleScript3",
      "Asp",
      "BASIC",
      "C",
      "C++",
      "Clojure",
      "COBOL",
      "ColdFusion",
      "Erlang",
      "Fortran",
      "Groovy",
      "Haskell",
      "Java",
      "JavaScript",
      "Lisp",
      "Perl",
      "PHP",
      "Python",
      "Ruby",
      "Scala",
      "Scheme"
    ];

    $("#spotlight").autocomplete({
		source: availableTags,
		appendTo: $("form:first")
	});

	$("#spotlight").data( "ui-autocomplete" )._renderMenu = function( ul, items ) {
		var that = this;		
		ul.attr("class", "nav nav-pills nav-stacked");
		$.each( items, function( index, item ) {
			that._renderItemData( ul, item );
		});
	};	    

});</pre>
&nbsp;</p>
<p>Prima di tutto abbiamo definito l&#8217;array dei termini possibili di ricerca, poi abbiamo inizializzato il campo con id &#8220;spotlight&#8221; per l&#8217;autocomplete del jQuery UI: qui si noti in particolare come sia stato necessario &#8220;appendere&#8221; il menù creato dal plugin al form tramite il parametro &#8220;appendTo&#8221;.</p>
<p>Il passo successivo è stato quello di modificare la funzione &#8220;<strong>_renderMenu</strong>&#8221; del plugin, ovvero quella funzione che ha il compito di inserire i vari risultati di ricerca alo&#8217;interno del menù sottoforma di entità HTML. Il procedimento è molto semplice: alla funzione vengono passati come parametri l&#8217;elemento del menu che sarà appeso al form, e gli elementi del risultato della ricerca in formato JSON. All&#8217;interno di un loop si scorrono poi tutti i risultati e viene richiamata la funzione &#8220;<strong>_renderItemData</strong>&#8221; che ha il compito di creare per ogni risultato l&#8217;elemento HTML e di aggiungerlo alla lista. Prima del loop noi sostituiamo semplicemente la classe del menu del jQuery UI con quelle del Twitter Bootstrap.</p>
<h3>Gli stili CSS: demo.css</h3>
<pre class="crayon-plain-tag">form#search-form{
  position: relative;
}

form#search-form ul{
	  position: absolute;
	  top: 0;
	  left: 0; 
	  width: 100%;
	  max-height: 200px;
	  overflow: auto;	  
	  z-index: 1;	  
	  border:1px solid #DDDDDD;
	  border-radius: 6px;	  
  }

span.ui-helper-hidden-accessible{
  display: none !important;
}

.ui-state-focus {
	 color: #ffffff;
	 background-color: #428bca;
}</pre>
&nbsp;</p>
<p>Anche per quanto riguarda gli stili il discorso non è molto complicato: per prima cosa attribuiamo il &#8220;position:relative&#8221; al form, di modo ché il menù dei risultati venga riposizionato in base al primo (è per questo che precedentemente lo abbiamo inserito tramite javascript al suo interno), poi impostiamo gli attributi del menu stesso, il quale avrà quindi una &#8220;position:absolute&#8221;.</p>
<p>Attribuiamo poi al menù una altezza massima di 200px con overflow:auto per far scorrere i risultati con una scrollbar, evitando di farli uscire dallo schermo, qualora fossero troppo numerosi.</p>
<p>Fatto ciò nascondiamo la classe helper del jQuery UI, ed impostiamo lo stile del risultato della lista su cui scaturisce il focus (<em>questo è un hack necessario perché purtroppo non è possibile modificare con poche righe di codice il markup e le classi di ogni singolo elemento della lista dei risultati. Per questo si è scelto di prendere la strada &#8220;più leggera</em>&#8220;).</p>
<h2>Twitter bootstrap 3 autocomplete: risultato finale</h2>

		</div> 
	</div> </div></div><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/09092013-jquery-autcomplete-bootstrap/"class="g-btn type_primary size_big"><span><i class="fa fa-icon-eye-open"></i>Demo</span></a></div>
 
		</div> 
	</div> </div></div><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Aiutami a condividere la risorsa per ottenere il <strong>download</strong>:</p>

		</div> 
	</div> </div></div><div class="g-cols"><div class="full-width"><div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5>Temi Twitter Bootstrap 3 premium</h5>

		</div> 
	</div> <div class="g-cols"><div class="one-third">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5><a href="http://themeforest.net/item/rioleme-responsive-multipurpose-wordpress-theme/7041517?ref=Colddesign">RioLeme &#8211; Responsive Multi-Purpose WordPress Theme</a></h5>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://themeforest.net/item/rioleme-responsive-multipurpose-wordpress-theme/7041517?ref=Colddesign"><img width="590" height="300" src="http://www.upcreative.net/wp-content/uploads/2013/09/rioleme-preview-image-590x300.__large_preview.jpg" class="attachment-full" alt="rioleme-preview-image-590x300.__large_preview" /></a>
		</div> 
	</div> </div><div class="one-third">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5><a href="http://themeforest.net/item/alamak-responsive-one-page-portfolio-theme/6502151?ref=Colddesign">Alamak &#8211; Responsive One Page Portfolio Theme</a></h5>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://themeforest.net/item/alamak-responsive-one-page-portfolio-theme/6502151?ref=Colddesign"><img width="590" height="300" src="http://www.upcreative.net/wp-content/uploads/2013/09/alamak-preview.__large_preview.jpg" class="attachment-full" alt="alamak-preview.__large_preview" /></a>
		</div> 
	</div> </div><div class="one-third">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5><a href="http://themeforest.net/item/moose-multipurpose-responsive-wordpress-theme/6928835?ref=Colddesign">Moose &#8211; Multipurpose Responsive WordPress Theme</a></h5>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://themeforest.net/item/moose-multipurpose-responsive-wordpress-theme/6928835?ref=Colddesign"><img width="590" height="300" src="http://www.upcreative.net/wp-content/uploads/2013/09/preview.__large_preview.png" class="attachment-full" alt="preview.__large_preview" /></a>
		</div> 
	</div> </div></div><div class="g-cols"><div class="one-third">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5><a href="http://themeforest.net/item/-slowave-multipurpose-responsive-wordpress-theme/6870792?ref=Colddesign">Slowave &#8211; Multipurpose Responsive WordPress Theme</a></h5>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://themeforest.net/item/-slowave-multipurpose-responsive-wordpress-theme/6870792?ref=Colddesign"><img width="590" height="300" src="http://www.upcreative.net/wp-content/uploads/2013/09/1.__large_preview.png" class="attachment-full" alt="1.__large_preview" /></a>
		</div> 
	</div> </div><div class="one-third">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5><a href="http://themeforest.net/item/floyd-one-page-parallax-wordpress-theme/7081098?ref=Colddesign">Floyd &#8211; One Page Parallax WordPress Theme</a></h5>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://themeforest.net/item/floyd-one-page-parallax-wordpress-theme/7081098?ref=Colddesign"><img width="590" height="300" src="http://www.upcreative.net/wp-content/uploads/2013/09/01_preview.__large_preview.png" class="attachment-full" alt="01_preview.__large_preview" /></a>
		</div> 
	</div> </div><div class="one-third">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5><a href="http://themeforest.net/item/nativechurch-multi-purpose-wordpress-theme/7082446?ref=Colddesign">NativeChurch &#8211; Multi Purpose WordPress Theme</a></h5>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://themeforest.net/item/nativechurch-multi-purpose-wordpress-theme/7082446?ref=Colddesign"><img width="590" height="300" src="http://www.upcreative.net/wp-content/uploads/2013/09/preview_image1_large_preview.__large_preview.jpg" class="attachment-full" alt="preview_image1_large_preview.__large_preview" /></a>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/twitter-bootstrap-3-autocomplete-con-jquery-ui/">Twitter Bootstrap 3 autocomplete &#8211; come realizzarlo con JQuery UI</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/twitter-bootstrap-3-autocomplete-con-jquery-ui/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
