Всем привет! Подскажите способ отключения скролла страницы при открытом popup
В общем, я добавляю класс через скрипт и вроде скролл отключился, но после закрытия popup страница подъезжает к своему началу. Я понимаю, что дело в position: fixed, но без него контент скроллится. Как можно все это обойти в моем случае?
const openPopup = document.querySelector('.block');
const popup = document.querySelector('.popup');
const btnClose = document.querySelector('.popup-close');
function closePopup() {
popup.classList.remove('popup-open');
document.body.classList.remove('stop-scroll');
}
openPopup.addEventListener('click', () => {
popup.classList.add('popup-open');
document.body.classList.add('stop-scroll');
});
btnClose.addEventListener('click', () => {
closePopup();
});
.stop-scroll {
overflow: hidden;
position: fixed;
top: -1268.8px;
left: 0px;
width: 100%;
}
.popup {
position: fixed;
z-index: -1;
opacity: 0;
top: 0;
left: auto;
width: 100%;
height: 100%;
transition: 0.5s ease-in-out;
&::before {
content: '';
position: absolute;
height: 100vh;
width: 100vw;
background: rgba(0, 0, 0, 0.5);
z-index: 20;
}
}
.popup__inner {
height: 100%;
right: -100%;
display: flex;
flex-direction: column;
margin-left: auto;
width: 776px;
position: relative;
z-index: 21;
background: #fff;
overflow: auto;
overflow-x: hidden;
}
.popup-open {
right: 0;
z-index: 25;
opacity: 1;
.popup__inner {
right: 0;
}
}
<div class="popup">
<div class="popup__inner">
//Popup content//
</div>
</div>
Ответы (2 шт):
Автор решения: Алексей
→ Ссылка
Вы можете отключить скролл просто добавив document.body overflow: hidden. Остальные стили добавлять не надо.

Автор решения: De.Minov
→ Ссылка
Для отключения часто использовал overflow: hidden для body, но недавно обнаружил, что в некоторых Safari на iOS это не срабатывает, пришлось использовать такую конструкцию.
html.off-scroll,
html.off-scroll body {
overflow: hidden;
touch-action: none;
}
Ну и для активации\деактивации вешаем\удаляем класс .off-scroll на document.querySelector('html').