Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Eventi per gestire touch screen, layout e navigazione

Intercettare e gestire gli input tipici del mondo mobile e le transizioni tra le pagine
Intercettare e gestire gli input tipici del mondo mobile e le transizioni tra le pagine
Link copiato negli appunti

jQuery Mobile aggiunge alcuni nuovi eventi per intercettare situazioni tipiche del mondo mobile o derivate dalla struttura del framework stesso.

Un primo gruppo di eventi che andiamo ad analizzare riguarda la tipica interazione dell'utente con dispositivi mobili con schermo interattivo (touch screen):

Evento Descrizione
tap indica il tocco del dito su un elemento della pagina
taphold indica il tocco e mantenimento del dito per circa un secondo su un elemento della pagina
swipe indica il trascinamento del dito sullo schermo orizzontalmente o verticalmente
swipeleft indica il trascinamento verso sinistra del dito sullo schermo
swiperight indica il trascinamento verso destra del dito sullo schermo

La gestione di questi eventi non è diversa dalla gestione degli eventi ordinari. È possibile associarli agli elementi di una pagina utilizzando i tipici metodi di jQuery.

Ad esempio, la seguente istruzione associa un gestore dell'evento taphold agli elementi di una lista:

$("#messaggi li").bind("taphold", function() {visualizzaMessaggio(this);});

Gruppi di eventi

Un altro gruppo di eventi riguarda la navigazione tra le pagine di un'applicazione jQuery Mobile. Il comportamento interno del framework è diverso a seconda che si tratti di pagine interne o esterne, quindi è opportuno aver chiaro il ciclo di vita della pagina in entrambi i casi.

  • Nel caso di navigazione di pagine interne, il framework prevede una fase di inizializzazione, durante la quale vengono generati ed potenziati gli elementi contenuti nella pagina, una fase di cambio pagina, durante la quale il framework si prepara a visualizzare la nuova pagina, ed una fase di transizione, che coincide con il momento in cui viene visualizzata la nuova pagina e nascosta quella precedente.
  • Nel caso di navigazione di pagine esterne esiste una fase precedente a quelle appena elencate, la fase di caricamento pagina, durante la quale il framework carica la pagina esterna e la inserisce nel DOM della pagina HTML corrente.

    Una fase di rimozione pagina prevede l'eliminazione dal DOM della pagina esterna non appena l'utente richiede di navigare verso una pagina diversa.

In corrispondenza a ciascuna di queste fasi del ciclo di vita delle pagine, jQuery Mobile genera alcuni eventi che possono essere intercettati e gestiti per avere un maggior controllo della navigazione.

Eventi per la navigazione tra le pagine

In corrispondenza della fase di caricamento pagina il framework prevede la generazione di tre eventi.

pagebeforeload

È l'evento che si verifica prima del caricamento di una pagina esterna. Al gestore di questo evento vengono passati due argomenti: il primo rappresenta l'evento corrente mentre il secondo è un oggetto che contiene i dati relativi alla pagina da caricare.

Nel caso in cui si intenda gestire con il proprio codice il caricamento della pagina esterna, è essenziale prevenire il comportamento predefinito del framework e farlo proseguire nella catena degli eventi standard subito dopo il caricamento.

Il seguente esempio mostra lo schema di gestione personalizzata del caricamento di una pagina esterna:

$(document).bind("pagebeforeload", function(event, data) {
  event.preventDefault();
  //istruzioni per il caricamento personalizzato della pagina
  data.deferred.resolve(data.absUrl, data.options, page);
});

In sostanza, l'istruzione event.preventDefault() inibisce il caricamento standard della pagina da parte del framework, mentre la chiamata finale indica a jQuery Mobile che il caricamento è andato a buon fine e che è possibile proseguire nella generazione degli eventi successivi.

In caso di fallimento del caricamento della pagina esterna l'istruzione conclusiva dovrà essere la seguente:

data.deferred.reject(data.absUrl, data.options);

pageload

Questo evento si verifica al termine del caricamento della pagina esterna. Al gestore dell'evento vengono passati due argomenti: l'evento corrente e un oggetto contenente i dati della pagina appena caricata.

pageloadfailed

È l'evento che si verifica in caso di fallimento del caricamento della pagina esterna. Normalmente il framework, dopo la generazione di questo evento, visualizza un messaggio d'errore. È possibile personalizzare la gestione del mancato caricamento disabilitando il comportamento standard e riattivando il proseguimento della catena degli eventi, come abbiamo visto nel caso dell'evento pagebeforeload.

Eventi di inizializzazione della pagina

Come abbiamo già detto, nella fase di inizializzazione, il framework inizializza la pagina, cioè crea il corrispondente oggetto, definisce le proprietà, arricchisce graficamente gli elementi in essa contenuti e predispone tutte le risorse necessarie per una corretta visualizzazione e navigazione. Le volte successive che si naviga verso la medesima pagina, il framework visualizza semplicemente la pagina che era stata inizializzata in precedenza.

E così anche quando si naviga verso un'altra pagina, non viene distrutta la pagina corrente, ma semplicemente nascosta.

In sostanza, l'inizializzazione di una pagina avviene soltanto una sola volta durante l'esecuzione dell'applicazione jQuery Mobile, mentre le successive navigazioni verso la pagina non sono altro che semplici visualizzazioni che coinvolgono le altre fasi del ciclo di vita.

Gli eventi previsti nella fase di inizializzazione sono:

pagebeforecreate

È l'evento che si verifica prima dell'inizializzazione di una pagina; in corrispondenza di questo evento è possibile manipolare il markup della pagina.

pagecreate

Questo evento si verifica subito dopo l'inizializzazione della pagina, quando esso è stata inserita nel DOM ma gli elementi in essa contenuti non sono ancora stati elaborati

pageinit

In corrispondenza di questo evento la pagina è stata inizializzata ed è pronta per la visualizzazione.

Fase di cambio pagina

pagebeforechange

È l'evento che si verifica prima del cambio pagina. Il gestore dell'evento riceve, oltre all'argomento che rappresenta l'evento corrente, un oggetto come secondo argomento che contiene le informazioni sulla pagina verso cui si sta per navigare.

In particolare questo oggetto prevede la proprietà toPage, che indica la pagina di destinazione, e la proprietà options, un oggetto con le opzioni di transizione alla nuova pagina.

pagechange

Questo evento si verifica dopo l'avvenuto cambio di pagina; è importante notare che esso si verifica dopo gli eventi di transizione della pagina che vedremo di seguito.

Il gestore dell'evento riceve gli stessi argomenti previsti per l'evento pagebeforechange.

pagechangefailed

In caso di fallimento del cambio pagina, questo evento offre l'opportunità di gestire la situazione.

Eventi per gestire le transizioni

La fase di transizione gestisce la visibilità della pagina, mostrandola o nascondendola ed eseguendo gli eventuali effetti di animazione richiesti. Gli eventi previsti sono:

pagebeforeshow

Indica l'evento che si verifica prima della visualizzazione della pagina. Il secondo argomento passato al gestore dell'evento è l'oggetto prevPage che rappresenta la pagina di provenienza.

pageshow

È l'evento che si verifica dopo la visualizzazione della pagina; anche in questo caso è disponibile l'oggetto prevPage che indica la pagina di provenienza

pagebeforehide

Si verifica prima che la pagina corrente venga nascosta. Il secondo argomento fornito al gestore dell'evento è l'oggetto nextPage che rappresenta la nuova pagina da visualizzare

pagehide

È l'evento che si verifica quando la pagina corrente è nascosta; anche in questo caso l'oggetto nextPage indica la nuova pagina da visualizzare.

pageremove

Infine, nella fase di rimozione, che ricordiamo riguarda soltanto le pagine esterne, è previsto questo evento. Serve per la verifica prima della effettiva rimozione della pagina. È possibile inibire o personalizzare la rimozione della pagina gestendo l'evento.

Anche in questo caso è necessario disabilitare il comportamento standard del framework invocando il metodo event.preventDefault().

Personalizzare le pagine tramite gli eventi

Come abbiamo avuto modo di vedere, la ricchezza di eventi durante il ciclo di vita di una pagina è tale da consentirci un'ampia gamma di personalizzazioni. Se, ad esempio, vogliamo inserire un piè di pagina personalizzato per tutte le pagine interne della nostra applicazione potremmo gestire l'evento pagebeforecreate come mostrato dal seguente codice:

$("section[data-role='page']").live("pagebeforecreate", function() {
  $(this).append("<div><p>Powered by HTML.it</p></div>");
})

Un altro gruppi di eventi, infine, intercetta alcune situazioni di interazione con il dispositivo:

scrollstart

indica l'evento di inizio dello scorrimento del contenuto nella pagina

scrollstop

indica la fine dello scorrimento del contenuto nella pagina

orientationchange

indica che l'orientamento del dispositivo è cambiato; l'argomento orientation assume uno dei due valori previsti: portrait o landscape; l'uso di questo evento ha a che vedere con il cosiddetto layout responsivo, che analizzeremo di seguito.

Ti consigliamo anche