2010-04-05 5 views
15

Existe-t-il un moyen simple dans jQuery de détecter quand les barres de défilement apparaissent et disparaissent sur un div qui a un débordement: auto? (Comme un événement? Je croise les doigts ...)La barre de défilement apparaît/disparaît dans jQuery?

(je préférerais ne pas avoir à regarder à la hauteur du contenu de la div)

+0

Il n'y a pas un tel événement. – vooD

+0

Jetez un oeil à la solution d'OrganicPanda sur ce sujet: [http://stackoverflow.com/questions/2175992/detect-when-window-vertical-scrollbar-appears](http://stackoverflow.com/questions/2175992/ detect-when-window-vertical-scrollbar-apparaît) –

+0

Copie possible de [Détecter lorsque la barre de défilement verticale de la fenêtre apparaît] (http://stackoverflow.com/questions/2175992/detect-when-window-vertical-scrollbar-appears) – user

Répondre

6

Comme d'autres l'ont dit, il n'y a pas de moyen facile. Voici un code que j'ai utilisé dans le passé pour détecter si une barre de défilement est présente.

// Used like $('#my-id').hasScrollbar(); 

jQuery.fn.hasScrollbar = function() { 
    var scrollHeight = this.get(0).scrollHeight; 

    //safari's scrollHeight includes padding 
    if ($.browser.safari) 
     scrollHeight -= parseInt(this.css('padding-top')) + parseInt(this.css('padding-bottom')); 

    if (this.height() < scrollHeight) 
     return true; 
    else 
     return false; 
} 

Vous devez manuellement cette fonction après l'ajout ou la suppression du contenu de la div et il ne sera probablement fonctionnera que si vous l'appelez sur des éléments visibles, mais il vaut mieux que de commencer à partir de zéro.

1

Pour autant que je sache, il n'y a pas événement pour cette.
Cependant, vous "pourriez" écrire votre propre événement spécial pour cela, je suppose que vous devez vérifier pour la hauteur et la largeur.

Il devrait être possible de détecter les barres de défilement si le .innerHeight excède la valeur d'un élément.

+0

Merci j'essayais d'éviter cela car j'utilise des divs absolument positionnés à l'intérieur d'un divs relativement positionnés. débordement: fonctionne automatiquement pour cela (comme par magie), mais il n'est pas si facile de calculer la hauteur des éléments internes. – Travis

7

Une autre façon d'y parvenir est de vérifier s'il y a des barres de défilement présentes à l'aide scrollLeft ou scrollTop:

//nudge the scrollbar away from its starting position 

$('#your_selector').scrollLeft(1); 

//A value of 0 is assigned if the scrollbars are at their default position, 
//or are abscent 

if($('#your_selector').scrollLeft() !== 0) return true; 

//put the scrollbar back to its starting position 

$('#your_selector').scrollLeft(0); 
+0

Très bonne idée! –

+0

Cela ressemble à la solution la plus simple, mais je crois que cela déclenchera également une refusion. – nogridbag