Вообще, ответ на этот вопрос есть уже давно: https://stackoverflow.com/a/4770179
Суть в том, что можно блокировать событие keydown
, если нажата одна из стрелок, и тогда страницу нельзя будет скроллить на стрелочки:
const handlerToDisableScroll = e => {
if(e.keyCode === 38 || e.keyCode === 40) {
e.preventDefault();
}
}
const disableScroll = () => document.addEventListener("keydown", handlerToDisableScroll, false);
const enableScroll = () => document.removeEventListener("keydown", handlerToDisableScroll);
Аналогично, если нужно полностью отключить скролл:
const handlerToDisableScroll = e => {
// Блокируется не только стрелка вверх/вниз, но и пробел
if(e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 32) {
e.preventDefault();
}
}
const preventDefault = e => e.preventDefault();
const disableScroll = () => {
document.addEventListener("keydown", handlerToDisableScroll);
document.addEventListener("wheel", preventDefault, { passive: false }); // без passive будет ошибка
}
const enableScroll = () => {
document.removeEventListener("keydown", handlerToDisableScroll);
document.removeEventListener("wheel", preventDefault);
}