Fornisco solo un po 'di sintonia con la soluzione di tfe . In particolare, ho aggiunto un ulteriore controllo per garantire che non vi sia alcuno spostamento del contenuto della pagina (aka spostamento della pagina ) quando la barra di scorrimento è impostata suhidden
.
Due funzioni Javascript lockScroll()
e unlockScroll()
possono essere definite, rispettivamente, per bloccare e sbloccare lo scorrimento della pagina.
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});
}
dove ho pensato che il <body>
non abbia margine iniziale.
Si noti che, sebbene la soluzione di cui sopra funzioni nella maggior parte dei casi pratici, non è definitiva poiché necessita di ulteriori personalizzazioni per le pagine che includono, ad esempio, un'intestazione con position:fixed
. Andiamo in questo caso speciale con un esempio. Supponiamo di avere
<body>
<div id="header">My fixedheader</div>
<!--- OTHER CONTENT -->
</body>
con
#header{position:fixed; padding:0; margin:0; width:100%}
Quindi, si dovrebbe aggiungere quanto segue in funzioni lockScroll()
e unlockScroll()
:
function lockScroll(){
//Omissis
$('#header').css('margin-right', marginR);
}
function unlockScroll(){
//Omissis
$('#header').css('margin-right', 0);
}
Infine, prenditi cura di un possibile valore iniziale per i margini o le imbottiture.