2009-11-19 9 views
52

Próbuję znaleźć dokładną wysokość i szerokość okna przeglądarki, ale podejrzewam, że zarówno Mozilla, jak i IE dają mi niewłaściwą liczbę. Oto moja metoda na wysokości:Znaleźć dokładną wysokość i szerokość widoku w trybie wielu przeglądarek (bez Prototype/jQuery)

var viewportHeight = window.innerHeight || 
        document.documentElement.clientHeight || 
        document.body.clientHeight; 

nie zaczęły jeszcze na szerokości ale zgaduję, że będzie to coś podobnego.

Czy istnieje lepszy sposób uzyskania tych informacji? Idealnie byłoby, gdyby to rozwiązanie działało również z Safari/Chrome/innymi przeglądarkami.

+0

możliwe duplikat [get wymiarów rzutni przeglądarka z JavaScript] (http://stackoverflow.com/questions/1248081/get-the-browser-viewport-dimensions-with-javascript) – Stephan

+0

Możesz także użyć [W] (https://github.com/pyrsmk/W) biblioteka, która obsługuje wykrywanie widoczności między przeglądarkami;) – pyrsmk

Odpowiedz

79

Może spróbuj tego:

function getViewport() { 

var viewPortWidth; 
var viewPortHeight; 

// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight 
if (typeof window.innerWidth != 'undefined') { 
    viewPortWidth = window.innerWidth, 
    viewPortHeight = window.innerHeight 
} 

// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document) 
else if (typeof document.documentElement != 'undefined' 
&& typeof document.documentElement.clientWidth != 
'undefined' && document.documentElement.clientWidth != 0) { 
    viewPortWidth = document.documentElement.clientWidth, 
    viewPortHeight = document.documentElement.clientHeight 
} 

// older versions of IE 
else { 
    viewPortWidth = document.getElementsByTagName('body')[0].clientWidth, 
    viewPortHeight = document.getElementsByTagName('body')[0].clientHeight 
} 
return [viewPortWidth, viewPortHeight]; 
} 

(http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/)

Jednak nie jest to w ogóle możliwe, aby uzyskać informacje na rzutni w wszystkie przeglądarki (np. IE6 w trybie dziwactwa). Ale powyższy skrypt powinien zrobić dobrą robotę :-)

+4

Utknąłeś z błędem przez 5 godzin, okazuje się, że jquery nie zwraca tej samej wartości w FF/Chrome, gdy robisz '$ (document) .width()' lub '$ (window) .width()'. 'window.innerWidth' działa świetnie. – qwerty

+0

dla urządzenia mobilnego wyświetla nieprawidłową szerokość i wysokość –

+0

Nie działa to w elementach iframe, ale zwraca rozmiar elementu iframe. Jakaś wskazówka na ten temat? –

12

Zawsze używałem tylko document.documentElement.clientHeight/clientWidth. Nie sądzę, że w tym przypadku potrzebujesz warunków OR.

+0

To nie zaszkodzi. Pozostałość nie zostanie oceniona po znalezieniu prawidłowej wartości –

+2

, w której występuje błąd literowy, powinno być: "document.documentElement". to nie działa w quircksmode ... na FF daje on całą wysokość dokumentu, zamiast tylko 'clientHeight', a na IE daje '0'. – vsync

+0

dziwne, działa dla mnie w IE6,7,8. – Ben

16

U mogą korzystać z krótszą wersję:

<script type="text/javascript"> 
<!-- 
function viewport(){ 
    var e = window; 
    var a = 'inner'; 
    if (!('innerWidth' in window)){ 
     a = 'client'; 
     e = document.documentElement || document.body; 
    } 
    return { width : e[ a+'Width' ] , height : e[ a+'Height' ] } 
} 
//--> 
</script> 
4

Spróbuj ..

<script type="text/javascript"> 
function ViewPort() 
{ 
var w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0) 
var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) 
var viewsize = w + "," + h; 
alert("Your View Port Size is:" + viewsize); 
} 
</script> 
+0

Dzięki! Właśnie uratowałeś moje życie! :) – gioNicol

Powiązane problemy