উত্তর:
$(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"
যখন হয় তখন @ বিটি স্ক্রোল বারগুলি দেখাতে পারে document.body
। তবে এটি হওয়া উচিত (hasVScrol &&CStyle.overflow == "দৃশ্যমান" && এলিমেন্ট.নোডনাম == "দেহ")। এছাড়াও cStyle.overflow === 'scroll'
আপনি চিহ্নিত হিসাবে এটি জন্য পরীক্ষা করা প্রয়োজন ।
আমি পূর্ববর্তী উত্তরটি চেষ্টা করেছি এবং দেখে মনে হচ্ছে না body ("বডি") কাজ করছে height উচ্চতা () অগত্যা পুরো এইচটিএমএল উচ্চতার প্রতিনিধিত্ব করে না।
আমি সমাধানটি নিম্নরূপে সংশোধন করেছি:
// 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:<");
}
আসুন এই প্রশ্নটি মৃতদের থেকে ফিরিয়ে আনুন;) গুগল আপনাকে একটি সহজ সমাধান না দেওয়ার একটি কারণ রয়েছে। বিশেষ কেস এবং ব্রাউজারের কুইক গণনাটিকে প্রভাবিত করে এবং এটি ততটা তুচ্ছ হিসাবে দেখা যায় না।
দুর্ভাগ্যক্রমে, এখনও পর্যন্ত এখানে বর্ণিত সমাধানগুলির সাথে সমস্যা রয়েছে। এগুলি মোটেও অস্বীকার করার অর্থ আমি বোঝাতে চাই না - এগুলি দুর্দান্ত সূচনা পয়েন্ট এবং আরও শক্তিশালী পদ্ধতির জন্য প্রয়োজনীয় সমস্ত মূল বিষয়বস্তুগুলিকে স্পর্শ করে। তবে আমি অন্য কোনও উত্তর থেকে কোড অনুলিপি করা এবং আটকানোর পরামর্শ দেব না কারণ কারণ
$( document ).width()
এবং ডকুমেন্ট আকারের jQuery এর বগি সনাক্তকরণের.height()
শিকার হয় ।window.innerWidth
ব্রাউজার যদি এটি সমর্থন করে তবে নির্ভর করে আপনার কোডটি মোবাইল ব্রাউজারগুলিতে স্ক্রোল বারগুলি সনাক্ত করতে ব্যর্থ করে তোলে, যেখানে স্ক্রোল বারের প্রস্থটি সাধারণত 0 হয় They এগুলি কেবল একটি ওভারলে হিসাবে অস্থায়ীভাবে প্রদর্শিত হয় এবং নথিতে স্থান গ্রহণ করে না । মোবাইলে জুম করাও সেভাবে সমস্যা হয়ে যায় (দীর্ঘ গল্প))html
এবং body
উপাদান উভয়ের ওভারফ্লো সেট করে তখন সনাক্তকরণটি ফেলে দেওয়া যেতে পারে ।"স্রেফ কাজ করে" (কাশি) এমন সমাধানের সন্ধানের জন্য আমি কল্পনা করার চেয়ে বেশি সময় ব্যয় করেছি। আমি যে অ্যালগরিদমটি নিয়ে এসেছি তা এখন jQuery.isInView এর একটি প্লাগইনের অংশ , যা একটি .hasScrollbar
পদ্ধতি প্রকাশ করে । আপনি যদি চান তবে উত্সটি একবার দেখুন ।
এমন একটি দৃশ্যে যেখানে আপনি পৃষ্ঠার সম্পূর্ণ নিয়ন্ত্রণে রয়েছেন এবং অজানা সিএসএস নিয়ে কাজ করতে হবে না, একটি প্লাগইন ব্যবহার করা ওভারকিল হতে পারে - সর্বোপরি, আপনি জানেন যে কোন প্রান্তের কেস প্রযোজ্য, এবং কোনটি নয়। তবে, অজানা পরিবেশে আপনার যদি নির্ভরযোগ্য ফলাফলের প্রয়োজন হয় তবে আমি মনে করি না যে এখানে বর্ণিত সমাধানগুলি যথেষ্ট হবে। আপনি ভাল-পরীক্ষিত প্লাগইন - আমার বা যে কেউ এলিস ব্যবহার করে আরও ভাল।
window.scrollbars
জিনিস আছে যার একক সম্পত্তি আছে visible
,। প্রতিশ্রুতিবদ্ধ মনে হচ্ছে কিন্তু তা নয়। এটি আইই 11 সহ আইই সমর্থিত নয়। এবং এটি আপনাকে কেবল বলে দেয় যে এখানে একটি স্ক্রোল বার রয়েছে - তবে কোনটি নয়। দেখুন পরীক্ষা পৃষ্ঠা এখানে ।
এই আমার জন্য কাজ করে:
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()
।
clientHeight
ওভার বাঞ্ছনীয় offsetHeight
এখানে। অন্যথায় আপনি একটি ঘন সীমানা রাখতে পারেন, এবং সেখানে ফিরে যখন কোনও স্ক্রোলবার নেই return
var hasScrollbar = window.innerWidth > document.documentElement.clientWidth;
অদ্ভুতভাবে এইগুলির সমাধানগুলির কোনওটিই আপনাকে জানায় না যে কোনও পৃষ্ঠায় একটি উল্লম্ব স্ক্রোলবার রয়েছে।
window.innerWidth - document.body.clientWidth
আপনাকে স্ক্রোলবারের প্রস্থ দিবে। এটি IE9 + (কম ব্রাউজারগুলিতে পরীক্ষিত নয়) যে কোনও ক্ষেত্রে কাজ করা উচিত। (বা কঠোরভাবে প্রশ্নের উত্তর দিতে,!!(window.innerWidth - document.body.clientWidth)
কেন? ধরা যাক আপনার একটি পৃষ্ঠা রয়েছে যেখানে সামগ্রীটি উইন্ডোর উচ্চতার চেয়ে লম্বা এবং ব্যবহারকারী উপরে / নীচে স্ক্রোল করতে পারে। আপনি যদি কোনও মাউস প্লাগ ইন না করে কোনও ম্যাকে ক্রোম ব্যবহার করেন তবে ব্যবহারকারী কোনও স্ক্রোলবার দেখতে পাবেন না। মাউস প্লাগ ইন করুন এবং একটি স্ক্রোলবার উপস্থিত হবে। (নোট করুন যে এই আচরণটি ওভাররাইড করা যেতে পারে, তবে এটি ডিফল্ট আফ্রিক)।
আমি ভ্যানিলা সমাধান পেয়েছি
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>
আপনার কাছে একটি স্ক্রোলবার আছে কিনা তা এই আপনাকে জানিয়ে দেবে। আমি এমন কিছু তথ্য অন্তর্ভুক্ত করেছি যা ডিবাগিংয়ে সহায়তা করতে পারে যা জাভাস্ক্রিপ্ট সতর্কতা হিসাবে প্রদর্শিত হবে।
ক্লোডিং বডি ট্যাগের পরে এটি কোনও স্ক্রিপ্ট ট্যাগে রাখুন।
আমি কিস সি বাকারের উত্তরের একটি আপডেট সংস্করণ লিখেছি:
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)
}
উইন্ডোর অভ্যন্তরের অংশের সাথে ডকুমেন্টের মূল উপাদানটির (যেমন এইচটিএমএল উপাদান) প্রস্থের তুলনা করুন:
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
থাকে তবে এটি কাজ করবে না। যদিও কোনও শরীরে লুকানো সেট করা অত্যন্ত বিরল।