2010-11-10 11 views

risposta

11

questo dovrebbe funzionare

$.fn.hasVerticalScrollBar = function() { 
    return this[0].clientHeight < this[0].scrollHeight; 
} 

$.fn.hasHorizontalScrollBar = function() { 
    return this[0].clientWidth < this[0].scrollWidth; 
} 

Uso

alert($('#mydivid').hasHorizontalScrollBar()); 
alert($('#mydivid').hasVerticalScrollBar()); 

EDIT:

Per utilizzare questo metodo con invisibile elemento, clonare il div, impostare l'opacità a 0, aggiungere il clone al corpo, controllare se il clone ha la barra di scorrimento e quindi rimuovere la clone: ​​

var clone = $('#mydivid').clone(); 
clone.css('opacity', '0').appendTo('body'); 
if (clone.hasHorizontalScrollBar()) { 
    //do the job here 
} 
clone.remove(); 
+1

Corretto un paio di refusi per te. +1 per una risposta eccellente, sebbene [questo possa apparire in Opera] (http://www.quirksmode.org/dom/w3c_cssom.html#t36). – lonesomeday

+0

@lonesomeday bene ho colpito la maggior parte dei browser ... L'opera è una quota minore del mercato –

+0

Ottima risposta, grazie! – Dave

0

Si potrebbe avvolgere il testo in un altro div, e confrontare la larghezza/altezza di quello con #myDiv. Se è più alta, v'è una barra di scorrimento:

<div id="myDiv" style="..."> 
    <div id="inner">random amount of lorem ipsum...</div> 
</div> 

Esempio:

if($('#inner').height() > $('#myDiv').height()){ 
    alert('vertical scrollbar'); 
} 

if($('#inner').width() > $('#myDiv').width()){ 
    alert('horizontal scrollbar'); 
} 
+0

.. Questo non funzionerebbe se ci fosse padding o margini sul div interno, perché mydiv sarebbe sempre maggiore. –

Problemi correlati