2013-05-23 9 views
18

Esiste un metodo semplice per mantenere la stessa intestazione/piè di pagina durante la navigazione delle pagine jQueryMobile? Le uniche soluzioni che ho trovato finora dipendono dall'iniettare in modo dinamico a cambio pagina, ma questo rovina le transizioni e semplicemente clona gli elementi, ho bisogno dell'originale.Come mantenere la stessa intestazione/piè di pagina tra le pagine in jQueryMobile?

Quindi c'è un modo ufficialmente supportato? Trovo strano che sembri l'unico a lottare con questo problema?

+1

Vuoi dire averli risolti durante la transizione senza animazione? O hai la stessa intestazione/piè di pagina per tutte le pagine? – Omar

+0

@Omar La stessa intestazione/piè di pagina per tutte le pagine. Mi piacerebbe che fossero animate, ma non è un grosso problema se solo la pagina stessa è animata. – Muis

risposta

9

Una soluzione integrata per il tuo problema non esiste. jQuery Mobile non ha una soluzione che condividerà un'intestazione e un piè di pagina tra le pagine caricate.

L'unica cosa che puoi fare è iniettarli dinamicamente o averli dall'inizio. Nel tuo caso lo stai facendo nel momento sbagliato. Se si desidera aggiungere correttamente un'intestazione e un piè di pagina, è necessario farlo durante l'evento di pagina corretto.

Un esempio di lavoro: http://jsfiddle.net/Gajotres/xwrqn/

Swipe per cambiare pagine e vedere come funziona (non ho voglia di perdere tempo con l'aggiunta di pulsanti in ogni pagina).

$(document).on('pagebeforecreate', '#article2, #article3', function(){ 
    $('<div>').attr({'data-role':'header','data-theme':'b','data-position':'fixed','data-id':'footer'}).append('<h3>Article</h3>').appendTo($(this)); 
    $('<div>').attr({'data-role':'footer','data-theme':'b','data-position':'fixed','data-id':'footer'}).append('<h3>Article footer</h3>').appendTo($(this));  
}); 

Se lo si fa durante la pagebeforecreate questo innescherà solo una volta quando viene creata la pagina per una prima volta. Il contenuto dinamico verrà aggiunto e poiché pagebeforecreate viene attivato prima che il markup del contenuto sia stato migliorato, non sarà necessario preoccuparsi dello stile di intestazione e piè di pagina.

Si noti un attributo 'id-dati': 'footer' aggiunto a ogni intestazione e piè di pagina, poiché solo il contenuto verrà animato durante la transizione della pagina, l'intestazione e il piè di pagina avranno lo stesso aspetto. Inoltre, jsFiddle ha un bug, quando scorri tra le pagine salteranno a 1-2px. Questo non accadrà in un vero esempio di vita.

+0

Questo sembra il tipo di soluzione che volevo evitare .. Per esempio, se metto un box a discesa nel mio footer, e gli utenti fanno una selezione lì, la sua selezione andrà persa quando si inserisce un footer clonato sul prossimo pagina. – Muis

+0

Sei corretto, ma una buona soluzione non esiste qui. Sarà necessario memorizzare tali dati tra le transizioni e mostrarli di nuovo in una nuova pagina. Che cosa ne pensi di questo non è così difficile soluzione complicata. Credimi perderai più tempo alla ricerca di una soluzione che desideri, quindi ti porterà a farlo in questo modo. Attualmente in jQuery Mobile 1.3.1 i widget di pagina non possono essere utilizzati al di fuori di un apage. Sarà possibile in jQuery Mobile 1.4 ma dovrai aspettare che esca. E a loro avviso è discutibile se funzionerà come previsto. – Gajotres

+1

Per ora ho smesso di usare il page-system, e uso solo una pagina, dove simulo altre pagine nascondendo/mostrando i DIV. È davvero pazzesco che devo reinventare la ruota, solo perché il normale sistema di paging non supporta questo. Ad ogni modo, grazie per il tuo aiuto! – Muis

14

Il modo più semplice è aggiungere un attributo "ID dati" alle intestazioni e ai piè di pagina su tutte le pagine. Per rendere "persistente" l'intestazione/piè di pagina, utilizzare lo stesso ID dati su tutte le pagine.

<div id="page1"> 
<div data-role="header" data-id="main-header"></div> 
... 
<div data-role="footer" data-id="main-footer"></div> 
</div> 

<div id="page2"> 
<div data-role="header" data-id="main-header"></div> 
... 
<div data-role="footer" data-id="main-footer"></div> 
</div> 

Si desidera anche correggere intestazioni e piè di pagina con css o data position = "fixed".

Spero che questo aiuti.

+2

Wow, l'ho fatto per me! Così facile rispetto ad altre soluzioni. – lapo

+0

FYI, Questo ha funzionato per il piè di pagina ma non per l'intestazione. Ho provato questo in jQM 1.4 –

+0

@ Mahendra puoi dirmi, come hai implementato questo? Come si lega il piè di pagina al '

'? Hai un "footer.html" separato? – adiga

0

Ecco come ho risolto un problema analogo:

 $(":mobile-pagecontainer").on("pagecontainerbeforetransition", function (event, ui) { 
      $("#header").prependTo(ui.toPage); 
      $("#control-panel").appendTo(ui.toPage); 
     }); 

mantiene la stessa intestazione/piè di pagina durante la navigazione nelle pagine jQueryMobile. Lo inietta dinamicamente a cambio pagina, rovina le transizioni, ma non clona gli elementi, dà l'originale.

+0

Questo aggiungerà l'intestazione/il piè di pagina prima di OGNI transizione alla pagina – HughHughTeotl

+0

Non aggiunge. Si muove. E sì, prima di ogni transizione. È un modo semplice per affrontare la maggior parte dei criteri OP. – Jayen