Chcę zapewnić odwiedzającym możliwość oglądania obrazów w wysokiej jakości, czy jest jakiś sposób na wykrycie rozmiaru okna?
A może jeszcze lepiej, rozmiar okna przeglądarki z JavaScriptem? Zobacz zielony obszar tutaj:
javascript
cross-browser
viewport
Alix Axel
źródło
źródło
getComputedStyle
rozwinąćhtml
tag.Odpowiedzi:
Przeglądarka
@media (width)
i@media (height)
wartościwindow.innerWidth
i.innerHeight
@media (width)
i@media (height)
które zawierają paski przewijaniainitial-scale
a zmiany powiększenia mogą powodować nieprawidłowe skalowanie wartości mobilnych do tego, co PPK nazywa wizualną rzutnią i może być mniejsze niż@media
wartościundefined
w IE8-document.documentElement.clientWidth
i.clientHeight
@media (width)
i@media (height)
gdy nie ma paska przewijaniajQuery(window).width()
co jQuery wywołuje rzutnię przeglądarkiZasoby
matchMedia
celu uzyskania dokładnych wymiarów w dowolnej jednostceźródło
$
zverge
. Jeśli chcesz zintegrować się z jQuery, zrób tojQuery.extend(verge)
. Zobacz: verge.airve.com/#static<!DOCTYPE html>
na górze strony, aby kod działał.document.documentElement.clientHeight
zwraca wysokość strony , awindow.innerHeight
zwraca wysokość rzutni . Duża różnica.Funkcje wymiaru jQuery
$(window).width()
i$(window).height()
źródło
$(window).height();
zwraca 536, podczas gdy$("html").height();
zwraca 10599Możesz użyć właściwości window.innerWidth i window.innerHeight .
źródło
document.documentElement.clientWidth
jest dokładniejszy i szerzej wspierany niżwindow.innerWidth
document.documentElement.clientWidth
daje mi szerokość rzutni, podczas gdy window.innerWidth daje mi szerokość dokumentu. Tak, na odwrót.Jeśli nie używasz jQuery, robi się brzydko. Oto fragment kodu, który powinien działać we wszystkich nowych przeglądarkach. Zachowanie jest inne w trybie dziwactwa i trybie standardów w IE. To się tym zajmuje.
źródło
clientHeight
nadocument.documentElement
elemencie, który daje rozmiar rzutni. Aby uzyskać rozmiar dokumentu, musisz to zrobićdocument.body.clientHeight
. Jak wyjaśnia Chetan, takie zachowanie dotyczy współczesnych przeglądarek. To jest łatwe do przetestowania. Wystarczy otworzyć konsolę i wpisaćdocument.documentElement.clientHeight
kilka otwartych kart.Wiem, że ma to akceptowalną odpowiedź, ale wpadłem na sytuację, w której
clientWidth
nie działało, ponieważ iPhone (przynajmniej mój) zwrócił 980, a nie 320, więc użyłemwindow.screen.width
. Pracowałem nad istniejącą witryną, będąc „responsywnym” i musiałem zmusić większe przeglądarki do korzystania z innej meta-rzutni.Mam nadzieję, że to komuś pomoże, może nie być idealne, ale działa w moich testach na iOS i Androidzie.
źródło
Spojrzałem i znalazłem sposób na przeglądarkę:
źródło
Ostatecznie udało mi się znaleźć ostateczną odpowiedź w JavaScript: The Definitive Guide, 6. wydanie autorstwa O'Reilly, str. 391:
To rozwiązanie działa nawet w trybie dziwactwa, podczas gdy obecne rozwiązanie Ryanve i ScottEvernden nie.
poza tym, że zastanawiam się, dlaczego
if (document.compatMode == "CSS1Compat")
nie ma liniiif (d.compatMode == "CSS1Compat")
, wszystko wygląda dobrze.źródło
documentElement.clientWidth
nie reaguje na zmianę orientacji urządzenia w iOS. b) wyświetla liczbę pikseli fizycznych (praktycznie bezużytecznych) zamiast pikseli wirtualnychJeśli szukasz rozwiązania innego niż jQuery, które daje prawidłowe wartości w wirtualnych pikselach na telefonie komórkowym , i uważasz, że to proste
window.innerHeight
lubdocument.documentElement.clientHeight
może rozwiązać problem, najpierw zapoznaj się z tym linkiem: https://tripleodeon.com/assets/2011/12/ table.htmlDeweloper wykonał dobre testy, które ujawniają problem: można uzyskać nieoczekiwane wartości dla Androida / iOS, poziomej / pionowej, normalnej / wysokiej gęstości wyświetlaczy.
Moja obecna odpowiedź nie jest jeszcze srebrną kulą (// todo), ale raczej ostrzeżeniem dla tych, którzy zamierzają szybko skopiować i wkleić dowolne rozwiązanie z tego wątku do kodu produkcyjnego.
Szukałem szerokości strony w wirtualnych pikselach na urządzeniach mobilnych i okazało się, że jedynym działającym kodem jest (nieoczekiwanie!)
window.outerWidth
. Później zbadam tę tabelę pod kątem prawidłowego rozwiązania, podając wysokość bez paska nawigacyjnego, kiedy będę miał czas.źródło
Ten kod pochodzi z http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/
Uwaga: aby odczytać szerokość, użyj
console.log('viewport width'+viewport().width);
źródło
Istnieje różnica między
window.innerHeight
idocument.documentElement.clientHeight
. Pierwszy obejmuje wysokość poziomego paska przewijania.źródło
Rozwiązaniem, które byłoby zgodne ze standardami W3C byłoby utworzenie przezroczystej div (na przykład dynamicznie z JavaScript), ustawienie jej szerokości i wysokości na 100vw / 100vh (jednostki Viewport), a następnie uzyskanie jej offsetWidth i offsetHeight. Następnie element można ponownie usunąć. Nie będzie to działać w starszych przeglądarkach, ponieważ jednostki rzutni są stosunkowo nowe, ale jeśli nie przejmujesz się nimi, ale (przyszłymi) standardami, zdecydowanie możesz pójść tą drogą:
Oczywiście możesz również ustawić objNode.style.position = "fixed", a następnie użyć 100% jako szerokość / wysokość - powinno to mieć ten sam efekt i do pewnego stopnia poprawić kompatybilność. Również ustawienie pozycji na ustaloną może być ogólnie dobrym pomysłem, ponieważ w przeciwnym razie div będzie niewidoczny, ale zajmie trochę miejsca, co spowoduje pojawienie się pasków przewijania itp.
źródło
W ten sposób to robię, wypróbowałem to w IE 8 -> 10, FF 35, Chrome 40, będzie działać bardzo płynnie we wszystkich współczesnych przeglądarkach (jak zdefiniowano window.innerWidth) oraz w IE 8 (bez okna). innerWidth) działa również płynnie, każdy problem (jak flashowanie z powodu przepełnienia: „ukryty”), zgłoś to. Tak naprawdę nie interesuje mnie wysokość rzutni, ponieważ stworzyłem tę funkcję, aby obejść niektóre responsywne narzędzia, ale można ją zaimplementować. Mam nadzieję, że to pomaga, doceniam komentarze i sugestie.
źródło