2012-10-27 19 views
7

Ho progettato un'app utilizzando Phonegap e jQuery Mobile. Il footer fisso funziona correttamente finché non faccio clic su un menu a discesa o su un campo di testo, che fa sì che il piè di pagina scompaia dalla vista (Android 4.0) o si sposti al centro della vista (scheda Android 2.2 Galaxy). Eventuali suggerimenti?jQuery Mobile footer fisso si muove quando appare la tastiera

PhoneGap Versione: 2.1.0 Cordova
jQuery Mobile Versione: 1.2.0

Ecco il mio codice:

<div data-role="footer" class="nav-mobilyzer" data-tap-toggle="false" data-position="fixed"> 
    <div data-role="navbar" class="nav-mobilyzer" data-grid="d"> 
    <h1>footer</h1>   
    </div> 
</div> 
+0

hai visto le risposte a una domanda simile qui: http://stackoverflow.com/questions/6861764/jquery-mobile-stick-footer-to-bottom-of-page – Taifun

+0

ecco la mia soluzione per problema http://stackoverflow.com/questions/13097663/jquery-mobile-fixed-footer-is-moving-when-the-keyboard-appears/29415239#29415239 – eliprodigy

risposta

14

ho avuto il problema in alcuni dispositivi piè di pagina visualizzata e in altri non l'ha fatto. Ho trovato questo ha funzionato per me:

var initialScreenSize = window.innerHeight; 
window.addEventListener("resize", function() { 
    if(window.innerHeight < initialScreenSize){ 
     $("[data-role=footer]").hide(); 
    } 
    else{ 
     $("[data-role=footer]").show(); 
    } 
}); 

EDIT:

Ma per quanto riguarda i cambiamenti di orientamento?

var portraitScreenHeight; 
var landscapeScreenHeight; 

if(window.orientation === 0 || window.orientation === 180){ 
    portraitScreenHeight = $(window).height(); 
    landscapeScreenHeight = $(window).width(); 
} 
else{ 
    portraitScreenHeight = $(window).width(); 
    landscapeScreenHeight = $(window).height(); 
} 

var tolerance = 25; 
$(window).bind('resize', function(){ 
    if((window.orientation === 0 || window.orientation === 180) && 
     ((window.innerHeight + tolerance) < portraitScreenHeight)){ 
     // keyboard visible in portrait 
    } 
    else if((window.innerHeight + tolerance) < landscapeScreenHeight){ 
     // keyboard visible in landscape 
    } 
    else{ 
     // keyboard NOT visible 
    } 
}); 

I conti di tolleranza per il calcolo inesatto dell'altezza orizzontale con larghezza verticale e viceversa.

+0

per IOS vedi http: // StackOverflow. it/questions/11600040/jquery-js-html5-change-page-content-when-keyboard-is-visible-on-mobile-devices – gmh04

+0

Questo ha funzionato per me ... Grazie! –

+0

sono nuovo a ionico come utilizzare questo codice? Sto affrontando lo stesso numero @ gmh04 – Erum

4

Ok, questo thread è vecchio come Internet a questo punto, ma la risposta di cui sopra non sembra fare il lavoro per me.

Il modo migliore che ho trovato è stato quello di associare un metodo per l'evento jQuery .blur(), e quindi chiamare i metodi fixedtoolbar() in un ordine ben preciso, vale a dire

var that = this; 
    $(':input').blur(function(){ 
     that.onFocusLoss(); 
    }); 

......

onFocusLoss : function() { 
    try { 
     $("[data-position='fixed']").fixedtoolbar(); 
     $("[data-position='fixed']").fixedtoolbar('destroy'); 
     $("[data-position='fixed']").fixedtoolbar(); 
     console.log('bam'); 
    } catch(e) { 
     console.log(e); 
    } 
}, 
3

la tastiera è aperta quando abbiamo il fuoco su un ingresso così:

// hide the footer when input is active 
$("input").blur(function() { 
    $("[data-role=footer]").show(); 
}); 

$("input").focus(function() { 
    $("[data-role=footer]").hide(); 
}); 
0

Try dati-rifugio durante la messa a fuoco = "" e impostarlo su un stringa vuota.

+0

Ciao Mohan, la tua risposta sembra essere troppo piccola per corrispondere allo standard StackOverflow, Sarà bello se le tue risposte sono sempre dettagliate (ma al punto) con il codice che ti aspetti di essere utile. – Vasim

1

Si può anche rilevare quando il display e della tastiera quando si fa scudo e mostrare o nascondere il proprio piè di conseguenza:

document.addEventListener("showkeyboard", function(){ $("[data-role=footer]").hide();}, false); 
document.addEventListener("hidekeyboard", function(){ $("[data-role=footer]").show();}, false); 
0

mia soluzione utilizza un altro attributo jQuery sul footer div. L'aggiunta di data-fullscreen = "true" a quel div era tutto ciò di cui avevo bisogno. So che questa correzione potrebbe non essere disponibile fino a poco tempo fa, ma sto usando jqm 1.3.2 e jq 1.9. Ho pensato di pubblicare questa soluzione nel caso in cui aiuti qualcuno. In bocca al lupo. :)

Problemi correlati