2010-04-05 13 views
15

C'è un modo semplice in jQuery per rilevare quando le barre di scorrimento appaiono e scompaiono su un div che ha overflow: auto? (Come un evento? Incrociamo le dita ...)La barra di scorrimento appare/scompare evento in jQuery?

(preferirei non dover guardare l'altezza del contenuto del div)

+0

Non esiste evento. – vooD

+0

Dai un'occhiata alla soluzione di OrganicPanda su questo altro thread: [http://stackoverflow.com/questions/2175992/detect-when-window-vertical-scrollbar-appears](http://stackoverflow.com/questions/2175992/ viene visualizzato detect-when-window-vertical-scrollbar) –

+0

Possibile duplicato di [Rileva quando viene visualizzata la barra di scorrimento verticale della finestra] (http://stackoverflow.com/questions/2175992/detect-when-window-vertical-scrollbar-appears) – user

risposta

6

Come altri hanno già detto, non esiste un modo semplice. Ecco un codice che ho usato in passato per rilevare se è presente una barra di scorrimento.

// 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; 
} 

avrete bisogno manualmente di chiamare questo dopo l'aggiunta o la rimozione di contenuti da div e probabilmente funzionerà solo se lo si chiama su elementi visibili, ma è meglio che partire da zero.

1

Per quanto ne so, non c'è evento per quella.
Tuttavia, "potresti" scrivere il tuo evento speciale per questo, suppongo che devi controllare lo per l'altezza e la larghezza.

Dovrebbe essere possibile rilevare barre di scorrimento se lo .innerHeight supera il valore di un elemento.

+0

Grazie stavo cercando di evitarlo visto che sto usando div in posizione assoluta all'interno di una posizione relativamente div. overflow: auto funziona per questo (magicamente), ma non è così facile calcolare l'altezza degli elementi interni. – Travis

7

Un altro modo per raggiungere questo obiettivo è quello di verificare se ci sono le barre di scorrimento presenti utilizzando scrollLeft o 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

Idea molto pulita! –

+0

Questa sembra la soluzione più semplice, ma credo che causerà anche un riflusso. – nogridbag

Problemi correlati