149 votes

Obtenir la largeur de la barre de défilement en utilisant JavaScript

Le code HTML suivant affichera une barre de défilement sur le bord intérieur droit de div.container.

Est-il possible de déterminer la largeur de cette barre de défilement ?

<div class="container" style="overflow-y:auto; height:40px;">
  <div class="somethingBig"></div>
</div>

1 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

4voto

Timothy Beamish Points 205

Voici une méthode simple utilisant jQuery.

var scrollbarWidth = jQuery('div.withScrollBar').get(0).scrollWidth - jQuery('div.withScrollBar').width();

En gros, nous soustrayons la largeur du défilement de la largeur totale, ce qui devrait donner la largeur de la barre de défilement. Bien entendu, vous pouvez mettre en cache la sélection jQuery('div.withScrollBar') afin de ne pas effectuer cette partie deux fois.

4voto

robocat Points 1567

En supposant que le conteneur n'apparaît qu'une seule fois sur la page et que vous utilisez jQuery :

var containerEl = $('.container')[0];
var scrollbarWidth = containerEl.offsetWidth - containerEl.clientWidth;

Voir aussi cette réponse pour plus de détails.

3voto

Gromo Points 459

J'ai utilisé la fonction next pour obtenir la hauteur/largeur de la barre de défilement :

function getBrowserScrollSize(){

    var css = {
        "border":  "none",
        "height":  "200px",
        "margin":  "0",
        "padding": "0",
        "width":   "200px"
    };

    var inner = $("<div>").css($.extend({}, css));
    var outer = $("<div>").css($.extend({
        "left":       "-1000px",
        "overflow":   "scroll",
        "position":   "absolute",
        "top":        "-1000px"
    }, css)).append(inner).appendTo("body")
    .scrollLeft(1000)
    .scrollTop(1000);

    var scrollSize = {
        "height": (outer.offset().top - inner.offset().top) || 0,
        "width": (outer.offset().left - inner.offset().left) || 0
    };

    outer.remove();
    return scrollSize;
}

Cette solution basée sur jQuery fonctionne dans IE7+ et tous les autres navigateurs modernes (y compris les appareils mobiles où la hauteur/largeur de la barre de défilement sera de 0).

0 votes

La hauteur et la largeur diffèrent-elles parfois ?

0 votes

Ils peuvent être différents. Pour l'instant, c'est possible uniquement dans les navigateurs basés sur webkit (safari, google chrome, opera).

0voto

Narendra Kothule Points 868

ce ça a marché pour moi

 function getScrollbarWidth() { 
    var div = $('<div style="width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;"><div style="height:100px;"></div>'); 
    $('body').append(div); 
    var w1 = $('div', div).innerWidth(); 
    div.css('overflow-y', 'scroll'); 
    var w2 = $('div', div).innerWidth(); 
    $(div).remove(); 
    return (w1 - w2); 
}

Prograide.com

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.

Powered by:

X