Ini solusi yang saya gunakan dalam aplikasi.
Saya menonaktifkan body overflow dan menempatkan seluruh situs web html di dalam wadah div. Penampung situs web memiliki luapan sehingga pengguna dapat menggulir halaman seperti yang diharapkan.
Saya kemudian membuat div saudara (#Prevent) dengan indeks-z lebih tinggi yang mencakup seluruh situs web. Karena #Prevent memiliki indeks-z yang lebih tinggi, #Prevent tumpang tindih dengan penampung situs web. Saat #Prevent terlihat, mouse tidak lagi mengarahkan kursor ke penampung situs web, jadi pengguliran tidak dimungkinkan.
Anda tentu saja dapat menempatkan div lain, seperti modal Anda, dengan z-index yang lebih tinggi daripada #Prevent di markup. Ini memungkinkan Anda membuat jendela pop-up yang tidak mengalami masalah scrolling.
Solusi ini lebih baik karena tidak menyembunyikan scrollbar (efek lompatan). Itu tidak membutuhkan pendengar acara dan mudah diterapkan. Ia bekerja di semua browser, meskipun dengan IE7 & 8 Anda harus bermain-main (tergantung pada kode spesifik Anda).
html
<body>
<div id="YourModal" style="display:none;"></div>
<div id="Prevent" style="display:none;"></div>
<div id="WebsiteContainer">
<div id="Website">
website goes here...
</div>
</div>
</body>
css
body { overflow: hidden; }
#YourModal {
z-index:200;
/* modal styles here */
}
#Prevent {
z-index:100;
position:absolute;
left:0px;
height:100%;
width:100%;
background:transparent;
}
#WebsiteContainer {
z-index:50;
overflow:auto;
position: absolute;
height:100%;
width:100%;
}
#Website {
position:relative;
}
jquery / js
function PreventScroll(A) {
switch (A) {
case 'on': $('#Prevent').show(); break;
case 'off': $('#Prevent').hide(); break;
}
}
nonaktifkan / aktifkan scroll
PreventScroll('on'); // prevent scrolling
PreventScroll('off'); // allow scrolling