Obtenez la fenêtre d'affichage du navigateur dimensions avec JavaScript
Que je veux offrir à mes visiteurs la possibilité de voir des images de haute qualité, est il possible que je peux détecter la taille de la fenêtre?
Ou, mieux encore, la taille de la fenêtre du navigateur avec JavaScript? Voir l'espace vert ici:
- Ce que je fais est un élément habituellement html à 100% de la hauteur et d'obtenir sa hauteur. Simple fonctionne partout.
- bonne prise! Si vous êtes frustrés obtenir les dimensions (et vous, sur les téléphones mobiles sans jQuery), vous pouvez
getComputedStyle
de l'étendue de lahtml
tag. - Aussi, vous pouvez utiliser le W de la bibliothèque, qui s'occupe de la croix-navigateur de la fenêtre de détection 😉
InformationsquelleAutor Alix Axel | 2009-08-08
Vous devez vous connecter pour publier un commentaire.
Cross-browser
@media (largeur)
et@media (hauteur)
valeurswindow.innerWidth
et.innerHeight
@media (width)
et@media (height)
qui comprennent les barres de défilementinitial-scale
et zoom les variations de peut provoquer mobile des valeurs de tort mise à l'échelle vers le bas pour ce PPK appelle la visual fenêtre d'affichage et être plus petite que la@media
valeursundefined
dans IE8-document.documentElement.clientWidth
et.clientHeight
@media (width)
et@media (height)
quand il y a pas barre de défilementjQuery(window).width()
qui jQuery appels la fenêtre d'affichage du navigateurRessources
matchMedia
pour obtenir les dimensions précises dans n'importe quelle unitéclientWidth
/clientHeight
est un no-go dans IE9 sur mobile. Pouvez-vous préciser sur qui? Excellente réponse par la manière dont! Merci!$
avecverge
. Si vous voulez intégrer dans jQuery, nejQuery.extend(verge)
. Voir: verge.airve.com/#static<!DOCTYPE html>
en haut de la page pour que le code fonctionne.window.innerWidth
? Je suis en train de calculer la largeur de la barre de défilement à résoudre les simplifier stackoverflow.com/q/23504154/89771.document.documentElement.clientHeight
etwindow.innerHeight
ont la même valeur, ce qui est encore différent dewindow.screen.height
window.screen.availHeight
quand adressbar est caché en raison de commandes numériques (testé sur nexus 5 avec android lollipop )document.documentElement.clientHeight
retourne le la hauteur de la page, alors que leswindow.innerHeight
retourne le fenêtre d'affichage de la hauteur de. Grande différence.window.innerWidth
peut en fait être plus grand que le réel virtuel (pixels) et de la largeur de l'écran, si il y est déjà contenu dans les DOM qui est plus grand. Dans ces situations,document.documentElement.clientHeight
renvoie toujours la plus petite corriger la largeur de la fenêtre d'affichage. Ce qui bien sûr est bizarre et tout à fait contraire à ce que l'on pourrait attendre.documentElement.clientHeight
etdocumentElement.clientWidth
, lorsqu'il est appelé à partir à l'intérieur de SVG document renvoie toujours 0 pour les deux. Dans google Chrome, ils retournent les valeurs correctes.DOCTYPE
?DOCTYPE
est nécessaire pourdocument.documentElement.clientHeight
pour être précis. Sinon, pouvez-vous nous donner quelques chiffres? Je viens de vérifier dans le Chrome du bureau de Windows et Chrome iPhone et l'.max
technique encore travaillé. Comparer àactual("height", "px")
à partir de github.com/ryanve/actual#apiMin(clientHeight, innerHeight) || 0
?Math.min(777, undefined)
estNaN
Min(Min(clientHeight || Infinity, innerHeight || Infinity) || 0)
jQuery dimension fonctions
$(window).width()
et$(window).height()
$(window).height();
retourne 536, alors que$("html").height();
retourne 10599Vous pouvez utiliser le de la fenêtre.innerWidth et de la fenêtre.innerHeight propriétés.
window.innerWidth
document.documentElement.clientWidth
me donne la largeur de la fenêtre d'affichage tout en fenêtre.innerWidth me donne la largeur. Oui, que le chemin de ronde.Si vous n'êtes pas à l'aide de jQuery, il devient laid. Voici un extrait de code qui devrait fonctionner sur tous les nouveaux navigateurs. Le comportement est différent en mode Quirks et les normes de la mode dans IE. Cela prend soin d'elle.
clientHeight
sur ledocument.documentElement
élément, qui vous donnera la taille de la fenêtre. Pour obtenir la taille du document, vous aurez besoin de fairedocument.body.clientHeight
. Comme Chetan explique, ce comportement s'applique pour les navigateurs modernes. Il est facile de tester. Il suffit d'ouvrir une console et taperdocument.documentElement.clientHeight
sur plusieurs onglets ouverts.J'ai été capable de trouver une réponse définitive en JavaScript: The Definitive Guide, 6e Édition par O'Reilly, p. 391:
Cette solution fonctionne même en mode Quirks, tandis que ryanve et ScottEvernden de la solution actuelle ne le font pas.
sauf pour le fait que je me demande pourquoi la ligne
if (document.compatMode == "CSS1Compat")
n'est pasif (d.compatMode == "CSS1Compat")
, tout semble bon.documentElement.clientWidth
ne pas répondre sur le dispositif de changement d'orientation sur iOS. b) affiche physique nombres de pixels (pratiquement inutile) au lieu de pixels virtuelsJe sais que c'est une réponse acceptable, mais j'ai couru dans une situation où
clientWidth
n'ai pas de travail, que l'iPhone (au moins la mienne) retourné 980, pas 320, j'ai donc utiliséwindow.screen.width
. Je travaillais sur le site existant, en faisant "répondre" et nécessaire pour forcer les grands navigateurs à utiliser une autre méta-fenêtre d'affichage.Espère que cela aide quelqu'un, il ne peut pas être parfait, mais il fonctionne dans mes tests sur iOs et Android.
J'ai cherché et trouvé un navigateur croix de chemin:
JS:
HTML:
Ce code est à partir de http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/
NB : pour lire la largeur, l'utilisation
console.log('viewport width'+viewport().width);
Il y a une différence entre
window.innerHeight
etdocument.documentElement.clientHeight
. La première comprend la hauteur de la barre de défilement horizontale.Si vous êtes à la recherche pour les non-jQuery solution qui donne les bonnes valeurs en pixels virtuels sur mobile, et vous pensez que la plaine
window.innerHeight
oudocument.documentElement.clientHeight
peut résoudre votre problème, veuillez consulter ce lien: https://tripleodeon.com/assets/2011/12/table.htmlLe développeur a fait un bon test qui révèle le problème: vous pouvez obtenir des valeurs inattendues pour Android/iOS, paysage/portrait, normal/haute densité affiche.
Ma réponse n'est pas la panacée mais (//todo), mais plutôt un avertissement à ceux qui vont rapidement copier-coller toute solution de ce fil dans le code de production.
Je cherchais la largeur de la page en pixels virtuels sur mobile, et j'ai trouvé le seul code du travail est (de manière inattendue!)
window.outerWidth
. Je vais examiner plus tard ce tableau pour corriger la solution de donner de la hauteur à l'exclusion de la barre de navigation, quand j'ai le temps.Une solution qui serait conforme aux normes W3C serait de créer un transparent div (par exemple de façon dynamique avec JavaScript), définissez la largeur et la hauteur de 100vw/100vh (Fenêtre d'affichage unités) et ensuite obtenir son offsetWidth et offsetHeight. Après cela, l'élément peut être retiré à nouveau. Cela ne fonctionnera pas dans les navigateurs plus anciens, parce que la fenêtre d'affichage unités sont relativement nouveaux, mais si vous ne se soucient pas d'eux, mais à propos de (bientôt) des normes au lieu de cela, vous pouvez certainement aller de cette façon:
Bien sûr, vous pouvez également définir objNode.style.position = "fixe" et ensuite utiliser 100% de la largeur/hauteur - ce qui devrait avoir le même effet et d'améliorer la compatibilité, dans une certaine mesure. Aussi, la position de réglage fixe pourrait être une bonne idée en général, parce que sinon la div sera invisible, mais qui consomment de l'espace, qui va conduire à des barres de défilement apparaissant etc.
C'est la façon dont je le fais, je l'ai essayé sous IE 8 -> 10, FF 35, Chrome 40, il fonctionne très lisse dans tous les navigateurs modernes (comme la fenêtre.innerWidth est défini) et dans IE 8 (sans fenêtre.innerWidth), il fonctionne en douceur ainsi, tout problème (comme clignote en raison de dépassement: "caché"), merci de nous le signaler. Je ne suis pas vraiment intéressé sur la fenêtre d'affichage de la hauteur que j'ai fait cette fonction juste pour contourner certains outils adaptés aux besoins, mais il pourrait être mis en œuvre. Espérons que cela aide, j'apprécie les commentaires et les suggestions.