J'ai un élément et j'ai besoin de sa largeur sans (!) Barre de défilement verticale.
Firebug me dit que la largeur du corps est de 1280px.
L'un ou l'autre de ces fonctionne bien dans Firefox:
console.log($('.element').outerWidth() );
console.log($('.element').outerWidth(true) );
$detour = $('.child-of-element').offsetParent();
console.log( $detour.innerWidth() );
Ils retournent tous 1263px, ce qui est la valeur que je recherche.
Cependant, tous les autres navigateurs me donnent 1280px.
Existe-t-il un moyen de navigation croisé pour obtenir une largeur plein écran sans (!) Barre de défilement verticale?
.prop("clientWidth")
et .prop("scrollWidth")
var actualInnerWidth = $("body").prop("clientWidth"); // El. width minus scrollbar width
var actualInnerWidth = $("body").prop("scrollWidth"); // El. width minus scrollbar width
en JavaScript:
var actualInnerWidth = document.body.clientWidth; // El. width minus scrollbar width
var actualInnerWidth = document.body.scrollWidth; // El. width minus scrollbar width
P.S: Notez que pour utiliser scrollWidth
de manière fiable, votre élément ne doit pas déborder horizontalement
Vous pouvez également utiliser .innerWidth()
mais ceci ne fonctionnera que sur l'élément body
var innerWidth = $('body').innerWidth(); // Width PX minus scrollbar
Vous pouvez utiliser javascript pour Vanilla en écrivant simplement:
var width = el.clientWidth;
Vous pouvez également l'utiliser pour obtenir la largeur du document comme suit:
var docWidth = document.documentElement.clientWidth || document.body.clientWidth;
Source: MDN
Vous pouvez également obtenir la largeur de la fenêtre complète, y compris la barre de défilement, comme suit:
var fullWidth = window.innerWidth;
Cependant, cela n’est pas supporté par tous les navigateurs. Par conséquent, vous voudrez peut-être utiliser docWidth
comme ci-dessus et ajouter le scrollbar width .
Source: MDN
Voici quelques exemples qui supposent que $element
est un élément jQuery
:
// Element width including overflow (scrollbar)
$element[0].offsetWidth; // 1280 in your case
// Element width excluding overflow (scrollbar)
$element[0].clientWidth; // 1280 - scrollbarWidth
// Scrollbar width
$element[0].offsetWidth - $element[0].clientWidth; // 0 if no scrollbar
Essaye ça :
$('body, html').css('overflow', 'hidden');
var screenWidth1 = $(window).width();
$('body, html').css('overflow', 'visible');
var screenWidth2 = $(window).width();
alert(screenWidth1); // Gives the screenwith without scrollbar
alert(screenWidth2); // Gives the screenwith including scrollbar
Vous pouvez obtenir la largeur de l'écran avec et sans barre de défilement à l'aide de ce code ..__ Ici, j'ai modifié la valeur de dépassement de body
et obtenir la largeur avec et sans barre de défilement.
L'élément HTML est l'élément le plus sûr pour obtenir la largeur et la hauteur correctes sans les barres de défilement. Essaye ça:
var width = document.documentElement.clientWidth
var height = document.documentElement.clientHeight
Le support du navigateur est plutôt correct, avec IE 9 et plus supportant cela. Pour OLD IE, utilisez l’une des nombreuses solutions de rechange mentionnées ici.
J'ai rencontré un problème similaire et le faire avec width:100%;
l'a résolu pour moi. Je suis venu à cette solution après avoir essayé une réponse à cette question et réalisé que la nature même d'un <iframe>
rendrait ces outils de mesure javascript inexacts sans utiliser une fonction complexe. Faire 100% est un moyen simple de s'en occuper dans un iframe. Je ne connais pas votre problème car je ne suis pas sûr des éléments HTML que vous manipulez.
Aucune de ces solutions ne fonctionnait pour moi, cependant j'ai pu résoudre le problème en prenant la largeur et en soustrayant la largeur de la barre de défilement . Je ne sais pas dans quelle mesure cela est compatible avec tous les navigateurs.
Voici ce que j'utilise
function windowSizes(){
var e = window,
a = 'inner';
if (!('innerWidth' in window)) {
a = 'client';
e = document.documentElement || document.body;
}
return {
width: e[a + 'Width'],
height: e[a + 'Height']
};
}
$(window).on('resize', function () {
console.log( windowSizes().width,windowSizes().height );
});