Qual è il modo più veloce per verificare se un elemento ha barre di scorrimento?
Una cosa ovviamente è controllare se l'elemento è più grande della sua finestra, che può essere facilmente fatto controllando questi due valori:
el.scrollHeight > el.offsetHeight || el.scrollWidth > el.offsetWidth
ma questo non significa che abbia anche le barre di scorrimento (quindi può effettivamente essere fatto scorrere dagli umani).
Domanda
Come posso verificare la presenza di barre di scorrimento in 1 browser incrociato e 2 solo javascript (come in nessun jQuery )?
Solo Javascript, perché ho bisogno del minor overhead possibile, perché mi piacerebbe scrivere un filtro selettore jQuery molto veloce
// check for specific scrollbars
$(":scrollable(x/y/both)")
// check for ANY scrollbar
$(":scrollable")
Suppongo che dovrei controllare overflow
impostazioni di stile, ma come posso farlo in modo cross browser?
Modifica aggiuntiva
Non solo overflow
impostazioni di stile. Controllare se un elemento ha una barra di scorrimento non è così banale come sembra. La prima formula che ho scritto sopra funziona bene quando l'elemento non ha un bordo, ma quando lo fa (specialmente quando il bordo è di larghezza considerevole), la offset
dimensione può essere più grande della scroll
dimensione ma l'elemento può ancora essere scorrevole. In realtà dobbiamo sottrarre i bordi dalla offset
dimensione per ottenere la visualizzazione scorrevole effettiva dell'elemento e confrontarla conscroll
dimensione.
Per riferimento futuro
:scrollable
Il filtro selettore jQuery è incluso nel mio .scrollintoview()
plugin jQuery. Il codice completo può essere trovato nel mio post sul blog se qualcuno ne ha bisogno. Anche se non ha fornito la soluzione effettiva, il codice di Soumya mi ha notevolmente aiutato a risolvere il problema. Mi ha indirizzato nella giusta direzione.
overflow:hidden
posizionato su di esso? Ci sarebbe un contenuto in eccesso ma non è ancora scorrevole. Il problema non è di gran lunga così semplice come potrebbe sembrare.