Comment puis-je déterminer la hauteur d'une barre de défilement horizontale ou la largeur d'une barre verticale en JavaScript ?
L'idée est géniale, je vais certainement faire une classe MooTools basée sur cela.
Comment puis-je déterminer la hauteur d'une barre de défilement horizontale ou la largeur d'une barre verticale en JavaScript ?
Desde Blog d'Alexandre Gomes Je ne l'ai pas essayé. Faites-moi savoir si cela fonctionne pour vous.
function getScrollBarWidth () {
var inner = document.createElement('p');
inner.style.width = "100%";
inner.style.height = "200px";
var outer = document.createElement('div');
outer.style.position = "absolute";
outer.style.top = "0px";
outer.style.left = "0px";
outer.style.visibility = "hidden";
outer.style.width = "200px";
outer.style.height = "150px";
outer.style.overflow = "hidden";
outer.appendChild (inner);
document.body.appendChild (outer);
var w1 = inner.offsetWidth;
outer.style.overflow = 'scroll';
var w2 = inner.offsetWidth;
if (w1 == w2) w2 = outer.clientWidth;
document.body.removeChild (outer);
return (w1 - w2);
};
Si vous changez votre thème pour un autre avec des barres de défilement de taille différente, quel est l'écart entre le calcul et la réalité ?
En utilisant jQuery, vous pouvez raccourcir la réponse de Matthew Vines à :
function getScrollBarWidth () {
var $outer = $('<div>').css({visibility: 'hidden', width: 100, overflow: 'scroll'}).appendTo('body'),
widthWithScroll = $('<div>').css({width: '100%'}).appendTo($outer).outerWidth();
$outer.remove();
return 100 - widthWithScroll;
};
Cette solution serait-elle vraiment plus propre si l'ensemble du code source de JQuery était copié-collé avant elle ? Parce que c'est à peu près ce que fait cette solution. Cette question ne demandait pas une réponse en JQuery, et il est parfaitement possible et efficace d'effectuer cette tâche sans l'utilisation d'une bibliothèque.
C'est le seul script que j'ai trouvé, qui fonctionne dans les navigateurs webkit ... :)
$.scrollbarWidth = function() {
var parent, child, width;
if(width===undefined) {
parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body');
child=parent.children();
width=child.innerWidth()-child.height(99).innerWidth();
parent.remove();
}
return width;
};
Version réduite :
$.scrollbarWidth=function(){var a,b,c;if(c===undefined){a=$('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body');b=a.children();c=b.innerWidth()-b.height(99).innerWidth();a.remove()}return c};
Et vous devez l'appeler quand le document est prêt ... donc
$(function(){ console.log($.scrollbarWidth()); });
Testé le 2012-03-28 sur Windows 7 avec les dernières versions de FF, Chrome, IE et Safari et 100% de fonctionnement.
source : http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth
Correction : width
sera toujours \=== indéfini le premièrement chaque fois que la fonction est appelée. Lors des appels ultérieurs de la fonction width
est déjà défini, cette vérification permet simplement d'éviter que les calculs soient à nouveau effectués inutilement.
Cela échouera dans le cas où la fenêtre n'a pas de barres de défilement (grand écran, ou petite page/application).
window.scrollBarWidth = function() {
document.body.style.overflow = 'hidden';
var width = document.body.clientWidth;
document.body.style.overflow = 'scroll';
width -= document.body.clientWidth;
if(!width) width = document.body.offsetWidth - document.body.clientWidth;
document.body.style.overflow = '';
return width;
}
J'ai d'abord essayé le réponse acceptée mais j'ai constaté que cela ne fonctionnait plus dans Firefox sous Windows 8. J'ai opté pour cette variante qui fait parfaitement l'affaire.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Voici un extrait de l'auteur du plugin JQuery Dimension. github.com/brandonaaron/jquery-getscrollbarwidth/blob/master/ Il est peut-être tard pour donner cette solution, mais elle me semble meilleure, IMO.
0 votes
Jetez un coup d'œil à cette solution : davidwalsh.name/detect-scrollbar-width (détection de la largeur de la barre de défilement)
0 votes
@GibboK -- cette solution échoue -- le offsetWidth == clientWidth donc c'est toujours zéro. Ceci est testé en bordure d'IE && Chrome.
1 votes
@beauXjames bizarre ça marche pour moi sur FF
0 votes
Cette question se pose dans le cas où la barre de défilement se trouve au mauvais endroit (quelque part au milieu de l'écran). Dans cette situation, vous ne souhaitez probablement pas afficher de barre de défilement. Dans la plupart des cas, j'ai trouvé qu'iScroll était la solution parfaite, neutre du point de vue du design, pour cette situation : iscrolljs.com
0 votes
Duplicata possible de Obtenir la largeur de la barre de défilement en utilisant JavaScript