Ich stelle nur ein wenig die Lösung von tfe vor . Insbesondere habe ich ein zusätzliches Steuerelement hinzugefügt, um sicherzustellen, dass der Seiteninhalt nicht verschoben wird (auch als Seitenverschiebung bezeichnet ), wenn die Bildlaufleiste auf eingestellt ist hidden
.
Zwei Javascript-Funktionen lockScroll()
undunlockScroll()
kann definiert werden, die jeweils zu sperren und die Seite blättern zu entsperren.
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});
}
wo ich davon ausgegangen bin, dass die <body>
keine anfängliche Marge hat.
Beachten Sie, dass die obige Lösung zwar in den meisten praktischen Fällen funktioniert, jedoch nicht endgültig ist, da für Seiten, die beispielsweise einen Header mit enthalten, weitere Anpassungen erforderlich sind position:fixed
. Lassen Sie uns mit einem Beispiel auf diesen Sonderfall eingehen. Angenommen, zu haben
<body>
<div id="header">My fixedheader</div>
<!--- OTHER CONTENT -->
</body>
mit
#header{position:fixed; padding:0; margin:0; width:100%}
Dann sollte man in Funktionen lockScroll()
und Folgendes hinzufügen unlockScroll()
:
function lockScroll(){
//Omissis
$('#header').css('margin-right', marginR);
}
function unlockScroll(){
//Omissis
$('#header').css('margin-right', 0);
}
Achten Sie abschließend auf einen möglichen Anfangswert für die Ränder oder Polster.