Đây là giải pháp đơn giản nhất tôi có được cho đến nay. Và tôi tin rằng tôi đã thử tất cả những người khác và đây là cách dễ nhất. Nó hoạt động rất tốt trên các thiết bị Windows , giúp đẩy trang từ bên phải để có chỗ cho thanh cuộn hệ thống và các thiết bị IOS không cần không gian cho thanh cuộn của chúng trong trình duyệt. Vì vậy, bằng cách sử dụng điều này, bạn sẽ không cần thêm phần đệm ở bên phải để trang không nhấp nháy khi bạn ẩn phần tràn của phần thân hoặc html bằng css .
Giải pháp khá đơn giản nếu bạn nghĩ về nó. Ý tưởng là cung cấp cho window.scrollTop () vị trí chính xác tương tự tại thời điểm cửa sổ bật lên được mở. Cũng thay đổi vị trí đó khi cửa sổ thay đổi kích thước (vì vị trí cuộn thay đổi một khi điều đó xảy ra).
Vì vậy, ở đây chúng tôi đi ...
Trước tiên, hãy tạo biến sẽ cho bạn biết rằng cửa sổ bật lên đang mở và gọi nó là stopWindowScroll . Nếu chúng tôi không làm điều này thì bạn sẽ gặp lỗi của một biến không xác định trên trang của bạn và đặt nó thành 0 - là không hoạt động.
$(document).ready(function(){
stopWindowScroll = 0;
});
Bây giờ, hãy làm cho phù thủy chức năng bật mở có thể là bất kỳ chức năng nào trong mã của bạn kích hoạt bất kỳ cửa sổ bật lên nào bạn đang sử dụng làm plugin hoặc tùy chỉnh. Trong trường hợp này, nó sẽ là một cửa sổ bật lên tùy chỉnh đơn giản với một tài liệu đơn giản về chức năng nhấp chuột.
$(document).on('click','.open-popup', function(){
// Saving the scroll position once opening the popup.
stopWindowScrollPosition = $(window).scrollTop();
// Setting the stopWindowScroll to 1 to know the popup is open.
stopWindowScroll = 1;
// Displaying your popup.
$('.your-popup').fadeIn(300);
});
Vì vậy, điều tiếp theo chúng ta làm là tạo chức năng bật lên gần, mà tôi lặp lại một lần nữa có thể là bất kỳ chức năng nào bạn đã tạo hoặc đang sử dụng trong một plugin. Điều quan trọng là chúng ta cần 2 hàm đó để đặt biến stopWindowScroll thành 1 hoặc 0 để biết khi nào nó mở hoặc đóng.
$(document).on('click','.open-popup', function(){
// Setting the stopWindowScroll to 0 to know the popup is closed.
stopWindowScroll = 0;
// Hiding your popup
$('.your-popup').fadeOut(300);
});
Sau đó, hãy tạo chức năng window.scroll để chúng ta có thể ngăn việc cuộn khi stopWindowScroll được đề cập ở trên được đặt thành 1 - là hoạt động.
$(window).scroll(function(){
if(stopWindowScroll == 1) {
// Giving the window scrollTop() function the position on which
// the popup was opened, this way it will stay in its place.
$(window).scrollTop(stopWindowScrollPosition);
}
});
Đó là nó. Không yêu cầu CSS để làm việc này ngoại trừ các kiểu của riêng bạn cho trang. Điều này làm việc như một cơ duyên đối với tôi và tôi hy vọng nó sẽ giúp bạn và những người khác.
Đây là một ví dụ hoạt động trên JSFiddle:
Ví dụ về Fiddle
Hãy cho tôi biết nếu điều này đã giúp. Trân trọng.