2013-04-19 4 views
5

SfondoOttenere larghezza disponibile affidabile e l'altezza utilizzando JavaScript

Sto avendo difficoltà a raggiungere una dimensione di finestra affidabile utilizzando JavaScript. Ho letto il numero this guide per configurare l'applicazione e this guide per informazioni sul targeting di risoluzioni specifiche del dispositivo.

Questo è il tag <meta> sulla pagina:

<!DOCTYPE html> 
... 
<meta name="viewport" content="target-densitydpi=device-dpi" /> 

Questo mi permette di utilizzare le immagini più nitide per disegnare l'interfaccia. Per provare la risoluzione che ho scritto questo pezzo di codice:

window.addEventListener('orientationchange', function() { 
    console.log(screen.availWidth + ' x ' + screen.availHeight) 
} 
// 1080 x 1920 or 1920 x 1080 

Problema 1

avevo sperato i pixel effettivamente disponibili potrebbero essere calcolata come:

width := screen.availWidth/devicePixelRatio 
height := screen.availHeight/devicePixelRatio 

Ma la devicePixelRatio è fissato a 3, indipendentemente dal dpi di destinazione; quindi, come posso determinare i pixel effettivi a mia disposizione?

Problema 2

Quanto sopra screen.availHeight non è esatto perché non tiene in considerazione l'altezza effettiva del componente WebView.

ho provato queste alternative:

console.log(document.documentElement.offsetHeight); 
// 1920 
console.log(window.innerHeight); 
// 240 

Questi valori sono praticamente inutile, e peggio, non cambiano quando lo schermo ruota né sono dipendenti dalla dpi bersaglio. C'è un modo migliore per farlo?

+0

Forse i valori di jQuery width() e height() restituiranno valori corretti per te? http://responsejs.com/labs/dimensions/ –

+0

Hye jack per favore fammi sapere come hai ottenuto la dimensione finalmente che funziona per voi. Anch'io sto affrontando lo stesso problema. – virus

risposta

3

E 'stato un bel po' dall'ultima volta che ho lavorato con il punto di vista di Android SDK e web, ma non si può esporre semplicemente le informazioni dal lato Java, dove è possibile determinare in modo affidabile? Così ogni volta che il vostro orientamento cambia + inizialmente si chiama

webview.loadUrl("javascript:setResolution(x,y,orientation)"); 

e nel vostro javascript si scrive le quote ad un luogo logico.

E 'non btw che questo sarebbe impossibile da JavaScript, ma qualsiasi momento ho bisogno di fare qualcosa di anche lontanamente lungo le linee di quello che si vuole fare ci vuole un sacco di tentativi ed errori per farlo dispositivo trasversale supportato, quindi personalmente ti consiglierei di usare il fatto che hai una visione web a tuo vantaggio. (E se per caso usi una struttura webview come cordova puoi anche fare un plugin javascript relativamente semplice)

+0

Grazie. Questo pensiero mi ha attraversato la mente :) detto questo, risolve solo uno dei problemi; l'altro problema è sapere quanti 'px' sono a tua disposizione in base al dpi del dispositivo. Hai una soluzione anche per questo? –

+0

Non puoi semplicemente usare 'DisplayMetrics metrics = getResources(). GetDisplayMetrics();' e passa 'metrics.xdpi;' 'metrics.ydpi;' alla tua webview come descritto sopra? Tuttavia, se stai usando 'target-densitydpi = device-dpi', questo dovrebbe essere per lo più inutile se non per determinare le dimensioni 'nella vita reale'. Per essere onesti, non sono del tutto sicuro di quale sia il tuo obiettivo finale. –

+0

Oppure sembra che tu voglia usare 'metrics.widthPixels' e' metrics.heightPixels', duro alla fine è la stessa cosa. –

0

Puoi utilizzare le query multimediali CSS per targetizzare ciò che vuoi targetizzare?

In questo caso, forse è possibile risolvere il problema con matchMedia.js - una soluzione cross-browser per testare le query multimediali in JavaScript. Qualcosa da considerare, giusto? Dal momento che avresti, oltre alle richieste di dimensioni, -webkit-device-pixel-ratio a tua disposizione (menzionato nella guida a cui ti sei collegato)?

Problemi correlati