2010-04-15 13 views
22

मैं jQuery का उपयोग कर एक डीआईवी में स्क्रॉल बार की उपस्थिति का पता लगाना चाहता हूं। मैं $('div').scrollTop() का उपयोग करने के बारे में सोच रहा था, लेकिन जब स्क्रॉल बार शीर्ष पर होता है और जब कोई स्क्रॉल बार नहीं होता है तो यह दोनों मामलों में 0 देता है।jQuery का उपयोग कर एक डीआईवी में स्क्रॉल बार की उपस्थिति का पता लगाना?

कोई विचार विचार लोग?

+1

देखें http://stackoverflow.com/questions/2571514/is-detecting-scrollbar-presence-with-jquery-still-difficult –

+0

या http://stackoverflow.com/questions/2059743/detect-elements-overflow -using-jquery –

+0

@moi_meme +1 मैं यहां पोस्ट करने के लिए उस प्रश्न की खोज कर रहा था: पी – fmsf

उत्तर

45

div पर overflow मान लिया जाये कि auto है:

लपेटें सामग्री है कि एक DIV के साथ बढ़ता है, तो मैं अगर एक (का पता लगाने:

var div= document.getElementById('something'); // need real DOM Node, not jQuery wrapper 
var hasVerticalScrollbar= div.scrollHeight>div.clientHeight; 
var hasHorizontalScrollbar= div.scrollWidth>div.clientWidth; 
+0

यह भी काम करता है। धन्यवाद। लेकिन मेरे समाधान उदाहरण के विपरीत मैंने पोस्ट किया, असली दुनिया में मेरे पास काम करने के लिए "आईडी" नहीं है, मैं jQuery सीएसएस चयनकर्ताओं का उपयोग कर डीआईवी का चयन कर रहा हूं ... – 7wp

+10

फिर 'jQueryElement.get (0)' का उपयोग करने के लिए वास्तविक डोम नोड http://api.jquery.com/get। – BalusC

+0

हालांकि यह वास्तव में उपयोगी है, क्या यह वास्तव में सही उत्तर है क्योंकि यह किसी भी jQuery का उपयोग नहीं करता है? –

-1

खैर मैं कर रहा द्वारा एक हल निम्नलिखित समाप्त हो गया लंबवत) wrapperDiv की ऊंचाई की तुलना करके containerDiv की ऊंचाई के साथ स्क्रॉल बार मौजूद है (यदि सामग्री बहुत बड़ी है तो आमतौर पर स्क्रॉल बार होता है)।

यदि wrapperDiv की ऊंचाई containerDiv की ऊंचाई से बड़ी है तो स्क्रॉल बार है, यदि यह छोटा है, तो कोई स्क्रॉल बार नहीं है।

<DIV id="containerDiv" style="width:100px;height:100px;overflow:auto;"> 
    <DIV id="wrapperDiv"> 
     .... content here... 
    </DIV> 
</DIV> 
+0

क्या आपने बॉबन्स के समाधान की कोशिश की? ऐसा लगता है जैसे यह अतिरिक्त रैपर div के बिना काम करेगा। –

+0

क्या वह दूसरा लिंक पोस्ट नहीं किया गया था? http://stackoverflow.com/questions/2059743/detect-elements-overflow-using-jquery –

+0

हाँ बॉबन्स का समाधान काम करेगा, लेकिन उदाहरण के विपरीत मैंने ऊपर दिया है, मेरे पास वास्तव में "आईडी" के साथ काम करने के लिए नहीं है। मैं jQuery सीएसएस चयनकर्ताओं का उपयोग कर चयन कर रहा हूं, इसलिए मैं क्लाइंट हाइट() तक पहुंचने के लिए getElementById का उपयोग नहीं कर सकता। प्लस मैं कच्चे .clientHeight मान पर भरोसा नहीं करता क्योंकि मुझे लगता है कि यह विभिन्न ब्राउज़रों में थोड़ा अलग संख्या देता है, है ना? – 7wp

18
// plugtrade.com - jQuery detect vertical scrollbar function // 
(function($) { 
    $.fn.has_scrollbar = function() { 
     var divnode = this.get(0); 
     if(divnode.scrollHeight > divnode.clientHeight) 
      return true; 
    } 
})(jQuery); 

उदाहरण:

if($('#mydiv').has_scrollbar()) { /* do something */ } 
+2

इस मुद्दे को हल करने के कई अन्य उदाहरणों/प्रयासों की तुलना में ग्रेट समाधान। मैंने पुष्टि की कि यह आईई, एफएफ और क्रोम पर काम करता है। – carrabino

0

मैं को संशोधित करेगा क्या bobince ऊपर उल्लेख किया है जब से तुम jQuery

var div= $('#something'); 
var hasVerticalScrollbar= div[0].scrollHeight > div[0].clientHeight; 
var hasHorizontalScrollbar= div[0].scrollWidth > div[0].clientWidth; 

इसका कारण यह है scrollHeight और scrollWidth डोम गुण हैं के लिए पूछ रहे हैं।

संबंधित मुद्दे