Це найпростіше рішення, яке я отримав поки що. І повірте, я спробував усі інші, і це найпростіший. Він чудово працює на пристроях Windows , що відсуває сторінку праворуч, щоб мати місце для системної панелі прокрутки та пристроїв IOS, які не потребують місця для своїх смуг прокрутки в браузерах. Отже, використовуючи це, вам не потрібно буде додавати набивання праворуч, щоб сторінка не мерехтіла, коли ви ховаєте переповнення тіла або html з допомогою css .
Рішення досить просте, якщо задуматися. Ідея полягає у наданні window.scrollTop () такої ж точної позиції в момент відкриття спливаючого вікна. Також змініть це положення, коли вікно змінить розмір (як положення прокрутки змінюється, як тільки це відбувається).
Тож ось ми йдемо ...
Спочатку даємо змогу створити змінну, яка дозволить вам знати, що спливаюче вікно відкрите, і назвіть його stopWindowScroll . Якщо ми цього не зробимо, ви отримаєте помилку невизначеної змінної на своїй сторінці та встановите її на 0 - як неактивну.
$(document).ready(function(){
stopWindowScroll = 0;
});
Тепер давайте зробимо функцію відкритого спливаючого меню відьмою будь-яку функцію у вашому коді, яка запускає будь-яке спливаюче вікно, яке ви використовуєте як плагін або звичай. У цьому випадку це буде звичайне спеціальне спливаюче вікно з простим документом про функцію клацання.
$(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);
});
Отже, наступне, що ми робимо - це створити функцію закриття спливаючих вікон, яку я повторюю знову, це будь-яка функція, яку ви вже створили або використовуєте в плагіні. Важливо те, що нам потрібні ці 2 функції, щоб встановити змінну stopWindowScroll на 1 або 0, щоб знати, коли вона відкрита чи закрита.
$(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);
});
Тоді давайте створимо функцію window.scroll, щоб ми могли запобігти прокрутці, як тільки згаданий вище stopWindowScroll встановлений на 1 - як активний.
$(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);
}
});
Це воно. Для цього не потрібен CSS, окрім власних стилів для сторінки. Це спрацювало як шарм для мене, і я сподіваюся, що це допоможе вам та іншим.
Ось робочий приклад JSFiddle:
JS Fiddle Приклад
Повідомте мене, чи допомогло це. З повагою