Đây là giải pháp của tôi mà tôi đã sử dụng trong các ứng dụng.
Tôi đã vô hiệu hóa phần tràn nội dung và đặt toàn bộ trang web html bên trong container div. Vùng chứa trang web bị tràn và do đó người dùng có thể cuộn trang như mong đợi.
Sau đó, tôi đã tạo một div anh chị em (#Prevent) với chỉ số z cao hơn bao phủ toàn bộ trang web. Vì #Prevent có chỉ số z cao hơn nên nó chồng lên vùng chứa trang web. Khi #Prevent hiển thị, chuột không còn di chuột qua các vùng chứa trang web, do đó, không thể cuộn.
Tất nhiên, bạn có thể đặt một div khác, chẳng hạn như phương thức của bạn, với chỉ số z cao hơn #Prevent trong đánh dấu. Điều này cho phép bạn tạo các cửa sổ bật lên mà không bị các vấn đề về cuộn.
Giải pháp này tốt hơn vì nó không ẩn các thanh cuộn (ảnh hưởng đến việc nhảy). Nó không yêu cầu người nghe sự kiện và rất dễ thực hiện. Nó hoạt động trên tất cả các trình duyệt, mặc dù với IE7 & 8, bạn phải chơi xung quanh (tùy thuộc vào mã cụ thể của bạn).
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;
}
}
tắt / bật cuộn
PreventScroll('on'); // prevent scrolling
PreventScroll('off'); // allow scrolling