Верстка, CSS, HTML, SVG
Убрать скролл без удаления полосы прокрутки
Можно как нибудь убрать возмможность скролла без удаления полоски прокрутки? Очень не приятно, когда модальное окно открывается и картинка дергается. Или же изначально убрать полоску скролла, но что бы скролл работал, а потом добавлять свойство overflow: hidden
То что тобой подразумевается можно сделать плюс/минус через отслеживание событий колесика мыши... однако работать это будет крайне плохо, плюс контролировать тяжело.
let sy = 0;
window.addEventListener('mousewheel', () => {
sy = window.scrollY;
});
window.addEventListener('scroll', () => {
window.scrollTo(0,sy);
});
Лучшим решением для предотвращения смещения контента в виду исчезновения скроллинга будет перехват и добавление правого отступа для body... const modal = document.createElement('div');
document.querySelector('button').onclick = () => {
// Получение глобальных размеров окна
let w_w = window.innerWidth;
// Получить ширину body, исключая ширину полосы прокрутки
let b_w = +getComputedStyle(document.body).width.slice(0,-2);
// Получить размер ширины полосы прокрутки и перевести в пиксели
let s_w = (w_w - b_w) + 'px';
// Добавить box-sizing: border-box для body, иначе padding будет снаружи
document.body.style.boxSizing = 'border-box';
// Добавить новый правый отступ, равный ширине скроллинга
document.body.style.paddingRight = s_w;
// Скрыть скроллинг со страницы
document.body.style.overflowY = 'hidden';
// Остальной код, отвечающий за появление модального окна
document.body.appendChild(modal);
}
modal.onclick = () => {
// Удалить все добавленные ранее стили в body
document.body.removeAttribute('style');
// Остальной код, отвечающий за исчезновение модального окна
modal.remove();
}
Некоторые данные можно получать иными способами. Однако суть примера в том, чтобы ты понимал, что проблема смещения легко исправляется.Нужно на js вычислить ширину скроллбара, и когда модалка открыта добавлить к body padding-left, на закрытие не забыть убрать.
Как вычислить ширину прокрутки »
Как вычислить ширину прокрутки »
Похожие вопросы
- Как лучше всего сделать прокрутку?
- Как убрать Как убрать подчеркивание ссылки в html или css
- как убрать с себя чёрную полосу?
- Как убрать горизонтальную прокрутку?
- Какой смысл в скролле по секциям (блокам)?
- Программная прокрутка div - последний штрих
- При поклейке однотонных обоев видны белые полосы на стыке полотен. Как убрать? Фото внутри.
- Что за чёрная вертикальная полоса у меня на экране и как её убрать?
- В Windows 10 в папке с картинками, после установки фона рабочего стола скролл автоматически сам возвращается на верх.
- Да что ж у мышей за проблемы то со скроллом?
И второй вопрос, могу ли я сделать кастомный скроллбар и тем самым упростить вычисления точно зная его ширину?