Saya hanya menyediakan sedikit penyetelan untuk solusi dengan TFE . Secara khusus, saya menambahkan beberapa kontrol tambahan untuk memastikan bahwa tidak ada pergeseran konten halaman (alias pergeseran halaman ) ketika bilah gulir diatur ke hidden
.
Dua fungsi Javascript lockScroll()
dan unlockScroll()
dapat didefinisikan, masing-masing, untuk mengunci dan membuka kunci gulir halaman.
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});
}
di mana saya berasumsi bahwa <body>
tidak memiliki margin awal.
Perhatikan bahwa, sementara solusi di atas bekerja di sebagian besar kasus praktis, itu tidak definitif karena perlu beberapa penyesuaian lebih lanjut untuk halaman yang mencakup, misalnya, header dengan position:fixed
. Mari kita masuk ke kasus khusus ini dengan sebuah contoh. Misalkan punya
<body>
<div id="header">My fixedheader</div>
<!--- OTHER CONTENT -->
</body>
dengan
#header{position:fixed; padding:0; margin:0; width:100%}
Kemudian, seseorang harus menambahkan fungsi berikut ini lockScroll()
dan unlockScroll()
:
function lockScroll(){
//Omissis
$('#header').css('margin-right', marginR);
}
function unlockScroll(){
//Omissis
$('#header').css('margin-right', 0);
}
Akhirnya, berhati-hatilah dengan beberapa nilai awal yang mungkin untuk margin atau bantalan.