मैं बस हल से थोड़ी ट्यूनिंग प्रदान करता हूं । विशेष रूप से, मैंने यह सुनिश्चित करने के लिए कुछ अतिरिक्त नियंत्रण जोड़ा कि स्क्रॉलबार के सेट होने पर पृष्ठ सामग्री (उर्फ पृष्ठ शिफ्ट ) की कोई शिफ्टिंग नहीं है hidden
।
पेज स्क्रॉल को लॉक और अनलॉक करने के लिए दो जावास्क्रिप्ट फ़ंक्शंस lockScroll()
और unlockScroll()
क्रमशः परिभाषित किए जा सकते हैं।
function lockScroll(){
$html = $('html');
$body = $('body');
var initWidth = $body.outerWidth();
var initHeight = $body.outerHeight();
var scrollPosition = [
self.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
self.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
];
$html.data('scroll-position', scrollPosition);
$html.data('previous-overflow', $html.css('overflow'));
$html.css('overflow', 'hidden');
window.scrollTo(scrollPosition[0], scrollPosition[1]);
var marginR = $body.outerWidth()-initWidth;
var marginB = $body.outerHeight()-initHeight;
$body.css({'margin-right': marginR,'margin-bottom': marginB});
}
function unlockScroll(){
$html = $('html');
$body = $('body');
$html.css('overflow', $html.data('previous-overflow'));
var scrollPosition = $html.data('scroll-position');
window.scrollTo(scrollPosition[0], scrollPosition[1]);
$body.css({'margin-right': 0, 'margin-bottom': 0});
}
जहां मैंने माना कि <body>
कोई प्रारंभिक मार्जिन नहीं है।
ध्यान दें कि, जबकि उपरोक्त समाधान अधिकांश व्यावहारिक मामलों में काम करता है, यह निश्चित नहीं है क्योंकि इसमें पृष्ठों के लिए कुछ और अनुकूलन की आवश्यकता होती है, उदाहरण के लिए, एक हेडर position:fixed
। आइए एक उदाहरण के साथ इस विशेष मामले में जाते हैं। मान लो
<body>
<div id="header">My fixedheader</div>
<!--- OTHER CONTENT -->
</body>
साथ में
#header{position:fixed; padding:0; margin:0; width:100%}
फिर, एक को कार्यों में निम्नलिखित जोड़ना चाहिए lockScroll()
और unlockScroll()
:
function lockScroll(){
//Omissis
$('#header').css('margin-right', marginR);
}
function unlockScroll(){
//Omissis
$('#header').css('margin-right', 0);
}
अंत में, मार्जिन या पैडिंग के लिए कुछ संभावित प्रारंभिक मूल्य का ध्यान रखें।