Je veux donner à mes visiteurs la possibilité de voir des images en haute qualité, existe-t-il un moyen de détecter la taille de la fenêtre?
Ou mieux encore, la taille de la fenêtre d'affichage du navigateur avec JavaScript? Voir l'espace vert ici:
javascript
cross-browser
viewport
Alix Axel
la source
la source
getComputedStyle
lahtml
balise étendue .Réponses:
Cross-browser
@media (width)
et@media (height)
valeurswindow.innerWidth
et.innerHeight
@media (width)
et@media (height)
qui inclut des barres de défilementinitial-scale
et les variations de zoom peuvent entraîner une réduction incorrecte des valeurs mobiles à ce que PPK appelle la fenêtre d'affichage et être plus petites que les@media
valeursundefined
dans IE8-document.documentElement.clientWidth
et.clientHeight
@media (width)
et@media (height)
quand il n'y a pas de barre de défilementjQuery(window).width()
ce qui jQuery appelle la fenêtre du navigateurRessources
matchMedia
pour obtenir des dimensions précises dans n'importe quelle unitéla source
$
parverge
. Si vous souhaitez intégrer dans jQuery, faites-lejQuery.extend(verge)
. Voir: verge.airve.com/#static<!DOCTYPE html>
en haut de la page pour que le code fonctionne.document.documentElement.clientHeight
renvoie la hauteur de la page , tandis quewindow.innerHeight
renvoie la hauteur de la fenêtre . Grande différence.Fonctions de dimension jQuery
$(window).width()
et$(window).height()
la source
$(window).height();
renvoie 536, tandis que$("html").height();
renvoie 10599Vous pouvez utiliser les propriétés window.innerWidth et window.innerHeight .
la source
document.documentElement.clientWidth
est plus précis et plus largement pris en charge quewindow.innerWidth
document.documentElement.clientWidth
me donne la largeur de la fenêtre tandis que window.innerWidth me donne la largeur du document. Oui, de cette façon.Si vous n'utilisez pas jQuery, cela devient moche. Voici un extrait qui devrait fonctionner sur tous les nouveaux navigateurs. Le comportement est différent en mode Quirks et en mode standard dans IE. Cela s'en occupe.
la source
clientHeight
l'document.documentElement
élément, ce qui vous donnera la taille de la fenêtre. Pour obtenir la taille du document, vous devez le fairedocument.body.clientHeight
. Comme l'explique Chetan, ce comportement s'applique aux navigateurs modernes. C'est facile à tester. Ouvrez simplement une console et tapezdocument.documentElement.clientHeight
sur plusieurs onglets ouverts.Je sais que cela a une réponse acceptable, mais je me suis retrouvé dans une situation où
clientWidth
cela ne fonctionnait pas, car l'iPhone (au moins le mien) a retourné 980, pas 320, alors j'ai utiliséwindow.screen.width
. Je travaillais sur un site existant, étant rendu "réactif" et j'avais besoin de forcer des navigateurs plus grands à utiliser une méta-fenêtre différente.J'espère que cela aide quelqu'un, ce n'est peut-être pas parfait, mais cela fonctionne dans mes tests sur iOs et Android.
la source
J'ai regardé et trouvé une méthode de navigation croisée:
la source
J'ai pu trouver une réponse définitive dans JavaScript: The Definitive Guide, 6th Edition by O'Reilly, p. 391:
Cette solution fonctionne même en mode Quirks, contrairement à la solution actuelle de ryanve et ScottEvernden.
à part le fait que je me demande pourquoi la ligne
if (document.compatMode == "CSS1Compat")
ne l'est pasif (d.compatMode == "CSS1Compat")
, tout a l'air bien.la source
documentElement.clientWidth
ne répond pas au changement d'orientation de l'appareil sur iOS. b) affiche le nombre de pixels physiques (pratiquement inutile) au lieu de pixels virtuelsSi vous recherchez une solution non jQuery qui donne des valeurs correctes en pixels virtuels sur mobile , et que vous pensez que c'est simple
window.innerHeight
oudocument.documentElement.clientHeight
peut résoudre votre problème, veuillez d'abord étudier ce lien: https://tripleodeon.com/assets/2011/12/ table.htmlLe développeur a fait de bons tests qui révèlent le problème: vous pouvez obtenir des valeurs inattendues pour Android / iOS, paysage / portrait, affichages normal / haute densité.
Ma réponse actuelle n'est pas encore la solution miracle (// todo), mais plutôt un avertissement à ceux qui vont copier-coller rapidement une solution donnée de ce fil dans le code de production.
Je cherchais la largeur de page en pixels virtuels sur mobile, et j'ai trouvé que le seul code fonctionnant est (de manière inattendue!)
window.outerWidth
. J'examinerai plus tard ce tableau pour une solution correcte donnant la hauteur sans la barre de navigation, quand j'aurai le temps.la source
Ce code provient de http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/
NB: pour lire la largeur, utilisez
console.log('viewport width'+viewport().width);
la source
Il y a une différence entre
window.innerHeight
etdocument.documentElement.clientHeight
. Le premier inclut la hauteur de la barre de défilement horizontale.la source
Une solution qui serait conforme aux normes W3C serait de créer une div transparente (par exemple dynamiquement avec JavaScript), de régler sa largeur et sa hauteur sur 100vw / 100vh (unités Viewport), puis d'obtenir ses offsetWidth et offsetHeight. Après cela, l'élément peut être supprimé à nouveau. Cela ne fonctionnera pas dans les navigateurs plus anciens car les unités de la fenêtre sont relativement nouvelles, mais si vous ne vous souciez pas d'elles mais des normes (à venir) à la place, vous pouvez certainement suivre cette voie:
Bien sûr, vous pouvez également définir objNode.style.position = "fixed" puis utiliser 100% comme largeur / hauteur - cela devrait avoir le même effet et améliorer la compatibilité dans une certaine mesure. En outre, définir la position sur fixed peut être une bonne idée en général, car sinon le div sera invisible mais consommera de l'espace, ce qui entraînera l'apparition de barres de défilement, etc.
la source
C'est comme ça que je le fais, je l'ai essayé dans IE 8 -> 10, FF 35, Chrome 40, cela fonctionnera très bien dans tous les navigateurs modernes (comme window.innerWidth est défini) et dans IE 8 (sans fenêtre). innerWidth) cela fonctionne aussi bien, tout problème (comme le clignotement à cause du débordement: "caché"), veuillez le signaler. Je ne suis pas vraiment intéressé par la hauteur de la fenêtre car j'ai créé cette fonction juste pour contourner certains outils réactifs, mais elle pourrait être implémentée. J'espère que cela aide, j'apprécie les commentaires et suggestions.
la source