Mise à jour pour 2017
Ma réponse originale a été écrite en 2009. Bien qu'elle fonctionne toujours, j'aimerais la mettre à jour pour 2017. Les navigateurs peuvent encore se comporter différemment. Je fais confiance à l'équipe jQuery pour faire un excellent travail pour maintenir la cohérence entre les navigateurs. Cependant, il n'est pas nécessaire d'inclure la bibliothèque entière. Dans la source jQuery, la partie pertinente se trouve à la ligne 37 de dimensions.js . Ici, il est extrait et modifié pour fonctionner de manière autonome:
function getWidth() {
return Math.max(
document.body.scrollWidth,
document.documentElement.scrollWidth,
document.body.offsetWidth,
document.documentElement.offsetWidth,
document.documentElement.clientWidth
);
}
function getHeight() {
return Math.max(
document.body.scrollHeight,
document.documentElement.scrollHeight,
document.body.offsetHeight,
document.documentElement.offsetHeight,
document.documentElement.clientHeight
);
}
console.log('Width: ' + getWidth() );
console.log('Height: ' + getHeight() );
Réponse originale
Étant donné que tous les navigateurs se comportent différemment, vous devrez d'abord tester les valeurs, puis utiliser la bonne. Voici une fonction qui fait cela pour vous:
function getWidth() {
if (self.innerWidth) {
return self.innerWidth;
}
if (document.documentElement && document.documentElement.clientWidth) {
return document.documentElement.clientWidth;
}
if (document.body) {
return document.body.clientWidth;
}
}
et de même pour la hauteur:
function getHeight() {
if (self.innerHeight) {
return self.innerHeight;
}
if (document.documentElement && document.documentElement.clientHeight) {
return document.documentElement.clientHeight;
}
if (document.body) {
return document.body.clientHeight;
}
}
Appelez les deux dans vos scripts en utilisant getWidth()
ou getHeight()
. Si aucune des propriétés natives du navigateur n'est définie, il sera renvoyé undefined
.
self.innerWidth 423
,document.documentElement.clientWidth 326
etdocument.body.clientWidth 406
. Dans ce cas, question: lequel est correct et lequel utiliser? Par exemple, je veux redimensionner google map. 326 ou 423 grande différence. Si largeur ~ 700, alors voir 759, 735, 742 (pas si grande différence)var pageWidth = Math.max(self.innerWidth || 0, document.documentElement.clientWidth || 0, document.body.clientWidth || 0);
etvar windowWidth = self.innerWidth || -1;
// à cause de "corps" ou "écran" ou "document" ne sont pas la "fenêtre" si vous vérifiez un contenu html débordé que vous pouvez comprendre. # i.stack.imgur.com/6xPdH.pnggetWidth()
références de fonctionself.innerHeight
C'est une douleur dans le cul . Je recommande de sauter le non-sens et d'utiliser jQuery , ce qui vous permet de le faire
$(window).width()
.la source
Les deux renvoient des entiers et ne nécessitent pas jQuery. Compatible avec tous les navigateurs.
Je trouve souvent que jQuery renvoie des valeurs invalides pour width () et height ()
la source
Pourquoi personne ne mentionne matchMedia?
Je n'ai pas beaucoup testé, mais testé avec les navigateurs Android par défaut et Android Chrome, le chrome de bureau, jusqu'à présent, il semble que cela fonctionne bien.
Bien sûr, il ne renvoie pas de valeur numérique, mais renvoie une valeur booléenne - si elle correspond ou non, cela peut ne pas correspondre exactement à la question, mais c'est ce que nous voulons de toute façon et probablement l'auteur de la question le souhaite.
la source
De W3schools et de son navigateur croisé à l'âge sombre d'IE!
la source
Voici une version plus courte de la fonction présentée ci-dessus:
la source
Une solution adaptée à la réponse JS moderne de Travis:
la source
Un ajout important à la réponse de Travis; vous devez mettre getWidth () dans le corps de votre document pour vous assurer que la largeur de la barre de défilement est comptée, sinon la largeur de la barre de défilement du navigateur soustraite de getWidth (). Ce que j'ai fait ;
et appelez une variable Width n'importe où par la suite.
la source