जवाबों:
$(document).ready(function() {
// Check if body height is higher than window height :)
if ($("body").height() > $(window).height()) {
alert("Vertical Scrollbar! D:");
}
// Check if body width is higher than window width :)
if ($("body").width() > $(window).width()) {
alert("Horizontal Scrollbar! D:<");
}
});
$(document)इसके बजाय उपयोग करना था $("body"), यह मेरे लिए तब काम करता था जब शरीर नहीं था (मेरे पास चौड़ाई / ऊंचाई पर एक पहलू अनुपात के साथ एक पूर्ण पॉज़िटिवेड कंटेनर है)
इसे इस्तेमाल करे:
var hasVScroll = document.body.scrollHeight > document.body.clientHeight;
यह आपको केवल तभी बताएगा कि ऊर्ध्वाधर स्क्रॉलहाइट देखने योग्य सामग्री की ऊंचाई से बड़ा है या नहीं। hasVScrollचर सही या गलत शामिल होंगे।
यदि आपको अधिक गहन जांच करने की आवश्यकता है, तो उपरोक्त कोड को निम्नलिखित में जोड़ें:
// Get the computed style of the body element
var cStyle = document.body.currentStyle||window.getComputedStyle(document.body, "");
// Check the overflow and overflowY properties for "auto" and "visible" values
hasVScroll = cStyle.overflow == "visible"
|| cStyle.overflowY == "visible"
|| (hasVScroll && cStyle.overflow == "auto")
|| (hasVScroll && cStyle.overflowY == "auto");
cStyle.overflow === 'scroll'?
cStyle.overflow == "visible" जब तत्व है तो @BT स्क्रॉल बार दिखा सकता है document.body। लेकिन यह होना चाहिए (hasVScroll && cStyle.overflow == "दृश्यमान" और& element.nodeName == "बॉडी")। इसके अलावा आपको यह cStyle.overflow === 'scroll'इंगित करने की आवश्यकता है कि आप क्या इंगित करते हैं।
मैंने पिछले उत्तर की कोशिश की और $ ("बॉडी") काम नहीं कर रहा है। ऊँचाई () जरूरी नहीं कि पूरे html ऊँचाई का प्रतिनिधित्व करे।
मैंने निम्नानुसार समाधान को ठीक किया है:
// Check if body height is higher than window height :)
if ($(document).height() > $(window).height()) {
alert("Vertical Scrollbar! D:");
}
// Check if body width is higher than window width :)
if ($(document).width() > $(window).width()) {
alert("Horizontal Scrollbar! D:<");
}
आइए इस प्रश्न को मृत से वापस लाएं;) एक कारण है कि Google आपको एक सरल समाधान नहीं देता है। विशेष मामले और ब्राउज़र क्विर्क गणना को प्रभावित करते हैं, और यह उतना तुच्छ नहीं है जितना लगता है।
दुर्भाग्य से, अब तक उल्लिखित समाधानों के साथ समस्याएं हैं। मैं उन्हें बिल्कुल अलग करने का मतलब नहीं है - वे महान शुरुआती बिंदु हैं और अधिक मजबूत दृष्टिकोण के लिए आवश्यक सभी प्रमुख गुणों पर स्पर्श करते हैं। लेकिन मैं किसी भी अन्य उत्तर से कोड को कॉपी करने और चिपकाने की सिफारिश नहीं करूंगा क्योंकि
$( document ).width()और दस्तावेज़ के आकार के jQuery की छोटी-छोटी पहचान का.height() शिकार होते हैं ।window.innerWidth, यदि ब्राउज़र इसका समर्थन करता है, तो आपका कोड मोबाइल ब्राउज़रों में स्क्रॉल बार का पता लगाने में विफल रहता है, जहां स्क्रॉल बार की चौड़ाई आम तौर पर 0. होती है। उन्हें अस्थायी रूप से ओवरले के रूप में दिखाया जाता है और दस्तावेज़ में जगह नहीं लेता है। । मोबाइल पर ज़ूम करना भी एक समस्या बन जाता है।htmlऔर bodyडिफ़ॉल्ट मानों के लिए दोनों तत्वों के अतिप्रवाह को निर्धारित करते हैं (तब क्या होता है, इसमें थोड़ा सा शामिल है - यह विवरण देखें )।मैंने अधिक समय बिताया है जितना मैंने एक समाधान खोजने पर सोचा होगा कि "बस काम करता है" (खांसी)। अब मैं जिस एल्गोरिथ्म के साथ आया हूं वह एक प्लगइन jQuery.isInView का हिस्सा है , जो एक .hasScrollbarविधि को उजागर करता है । यदि आप चाहें तो स्रोत पर एक नज़र डालें ।
ऐसे परिदृश्य में जहां आप पृष्ठ के पूर्ण नियंत्रण में हैं और अज्ञात सीएसएस से निपटने के लिए नहीं है, एक प्लगइन का उपयोग करना ओवरकिल हो सकता है - आखिरकार, आप जानते हैं कि कौन से किनारे मामले लागू होते हैं, और जो नहीं करते हैं। हालांकि, अगर आपको किसी अज्ञात वातावरण में विश्वसनीय परिणाम चाहिए, तो मुझे नहीं लगता कि यहां उल्लिखित समाधान पर्याप्त होंगे। आप एक अच्छी तरह से परीक्षण किए गए प्लगइन का उपयोग करके बेहतर हैं - मेरा या कोई भी elses।
window.scrollbarsवस्तु है, जो केवल एक प्रॉपर्टी है visible। होनहार लगता है, लेकिन नहीं है। यह IE में समर्थित नहीं है, IE11 सहित। और यह सिर्फ आपको बताता है कि एक स्क्रॉल बार है - लेकिन कौन सा नहीं। परीक्षा पृष्ठ यहाँ देखें ।
इसने मेरे लिए काम किया:
function hasVerticalScroll(node){
if(node == undefined){
if(window.innerHeight){
return document.body.offsetHeight> window.innerHeight;
}
else {
return document.documentElement.scrollHeight >
document.documentElement.offsetHeight ||
document.body.scrollHeight>document.body.offsetHeight;
}
}
else {
return node.scrollHeight> node.offsetHeight;
}
}
शरीर के लिए, बस उपयोग करें hasVerticalScroll()।
clientHeightoffsetHeightयहाँ पर बेहतर है। अन्यथा आपके पास एक मोटी सीमा हो सकती है, और वहां जाने पर स्क्रॉलबार नहीं है।
var hasScrollbar = window.innerWidth > document.documentElement.clientWidth;
अजीब तरह से इन समाधानों में से कोई भी आपको यह नहीं बताता है कि किसी पृष्ठ में एक लंबवत स्क्रॉलबार है।
window.innerWidth - document.body.clientWidthआप स्क्रॉलबार की चौड़ाई दे देंगे। यह कुछ भी IE9 + (कम ब्राउज़रों में परीक्षण नहीं) में काम करना चाहिए। (या सख्ती से सवाल का जवाब देने के लिए,!!(window.innerWidth - document.body.clientWidth)
क्यों? मान लें कि आपके पास एक पृष्ठ है जहाँ सामग्री विंडो की ऊँचाई से अधिक है और उपयोगकर्ता ऊपर / नीचे स्क्रॉल कर सकता है। यदि आप मैक पर क्रोम का उपयोग कर रहे हैं जिसमें कोई माउस प्लग नहीं है, तो उपयोगकर्ता को स्क्रॉलबार दिखाई नहीं देगा। एक माउस प्लग करें और एक स्क्रॉलबार दिखाई देगा। (ध्यान दें कि इस व्यवहार को ओवरराइड किया जा सकता है, लेकिन यह डिफ़ॉल्ट AFAIK है)।
मुझे वनीला का घोल मिला
var hasScrollbar = function() {
// The Modern solution
if (typeof window.innerWidth === 'number')
return window.innerWidth > document.documentElement.clientWidth
// rootElem for quirksmode
var rootElem = document.documentElement || document.body
// Check overflow style property on body for fauxscrollbars
var overflowStyle
if (typeof rootElem.currentStyle !== 'undefined')
overflowStyle = rootElem.currentStyle.overflow
overflowStyle = overflowStyle || window.getComputedStyle(rootElem, '').overflow
// Also need to check the Y axis overflow
var overflowYStyle
if (typeof rootElem.currentStyle !== 'undefined')
overflowYStyle = rootElem.currentStyle.overflowY
overflowYStyle = overflowYStyle || window.getComputedStyle(rootElem, '').overflowY
var contentOverflows = rootElem.scrollHeight > rootElem.clientHeight
var overflowShown = /^(visible|auto)$/.test(overflowStyle) || /^(visible|auto)$/.test(overflowYStyle)
var alwaysShowScroll = overflowStyle === 'scroll' || overflowYStyle === 'scroll'
return (contentOverflows && overflowShown) || (alwaysShowScroll)
}
window.innerWidth > document.documentElement.clientWidthयह सच है, लेकिन window.innerHeight > document.documentElement.clientHeightऐसा नहीं है। ऐसा लग रहा है कि जैसे इस मामले में यह दूसरा रास्ता था। मैं जेएस डेवलपर नहीं हूं, मुझे सिर्फ सेलेनियम परीक्षणों के लिए इसकी आवश्यकता है। मैं संकेत के लिए आभारी हूं।
<script>
var scrollHeight = document.body.scrollHeight;
var clientHeight = document.documentElement.clientHeight;
var hasVerticalScrollbar = scrollHeight > clientHeight;
alert(scrollHeight + " and " + clientHeight); //for checking / debugging.
alert("hasVerticalScrollbar is " + hasVerticalScrollbar + "."); //for checking / debugging.
</script>
यह आपको बताएगा कि आपके पास स्क्रॉलबार है या नहीं। मैंने कुछ जानकारी शामिल की है जो डीबगिंग में मदद कर सकती है, जो जावास्क्रिप्ट अलर्ट के रूप में प्रदर्शित होगी।
क्लोजिंग बॉडी टैग के बाद इसे स्क्रिप्ट टैग में डालें।
मैंने Kees C. Bakker के उत्तर का एक अद्यतन संस्करण लिखा:
const hasVerticalScroll = (node) => {
if (!node) {
if (window.innerHeight) {
return document.body.offsetHeight > window.innerHeight
}
return (document.documentElement.scrollHeight > document.documentElement.offsetHeight)
|| (document.body.scrollHeight > document.body.offsetHeight)
}
return node.scrollHeight > node.offsetHeight
}
if (hasVerticalScroll(document.querySelector('body'))) {
this.props.handleDisableDownScrollerButton()
}
फ़ंक्शन सही है या गलत इस पर निर्भर करता है कि पृष्ठ पर एक लंबवत स्क्रॉलबार है या नहीं।
उदाहरण के लिए:
const hasVScroll = hasVerticalScroll(document.querySelector('body'))
if (hasVScroll) {
console.log('HAS SCROLL', hasVScroll)
}
बस विंडो के भीतरी भाग के खिलाफ दस्तावेज़ रूट तत्व (यानी html तत्व) की चौड़ाई की तुलना करें:
if ((window.innerWidth - document.documentElement.clientWidth) >0) console.log('V-scrollbar active')
अगर आपको भी स्क्रॉलबार की चौड़ाई जानने की आवश्यकता है:
vScrollbarWidth = window.innerWidth - document.documentElement.clientWidth;
अन्य समाधानों ने मेरी एक परियोजना में काम नहीं किया और मैं अतिप्रवाह सीएसएस संपत्ति की जांच कर रहा हूं
function haveScrollbar() {
var style = window.getComputedStyle(document.body);
return style["overflow-y"] != "hidden";
}
लेकिन यह केवल तभी काम करेगा जब स्क्रॉलबार गायब हो जाए, तो प्रॉप बदलकर यह काम नहीं करेगा यदि सामग्री विंडो के बराबर या छोटी है।
overflowसंपत्ति लाइन के साथ कहीं परbodyसेट हैhidden, तो यह काम नहीं करेगा। एक शरीर पर छिपी हुई स्थापना अत्यंत दुर्लभ है, हालांकि।