Не могу заблокировать прокрутку в нужный момент
Столкнулся с проблемой при блокировке скролла. При достижении определенной точки на странице скрипт должен блокировать возможность дальнейшей прокрутки. Попробовал реализовать так:
window.addEventListener('scroll', function{
if (window.pageYOffset > 1300) {
window.scrollTo(0, 1300);
document.body.style.overflow = 'hidden';
}
});
Однако происходит такой эффект, будто метод scrollTo не работает (то-есть скролл заблокировался, до дальше определенной точки). Также пробовал проверять так if (window.pageYOffset == 1300){}, но таким образом слушатель не улавливает момент, когда нужно остановить скролл. Прошу помочь с данным моментом.
Ответы (1 шт):
Автор решения: Rapprogtrain
→ Ссылка
Прокрутку нельзя отменить. Но вы можете сделать это, отменив событие:
function enable() {
enableScroll();
document.getElementById("status").innerHTML = "Разрешено";
document.getElementById("status").className = "enabled";
};
function disable() {
disableScroll();
document.getElementById("status").innerHTML = "Запрещенно";
document.getElementById("status").className = "disabled";
};
// left: 37, up: 38, right: 39, down: 40,
// spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36
var keys = {37: 1, 38: 1, 39: 1, 40: 1};
function preventDefault(e) {
e.preventDefault();
}
function preventDefaultForScrollKeys(e) {
if (keys[e.keyCode]) {
preventDefault(e);
return false;
}
}
// modern Chrome requires { passive: false } when adding event
var supportsPassive = false;
try {
window.addEventListener("test", null, Object.defineProperty({}, 'passive', {
get: function () { supportsPassive = true; }
}));
} catch(e) {}
var wheelOpt = supportsPassive ? { passive: false } : false;
var wheelEvent = 'onwheel' in document.createElement('div') ? 'wheel' : 'mousewheel';
// call this to Disable
function disableScroll() {
window.addEventListener('DOMMouseScroll', preventDefault, false); // older FF
window.addEventListener(wheelEvent, preventDefault, wheelOpt); // modern desktop
window.addEventListener('touchmove', preventDefault, wheelOpt); // mobile
window.addEventListener('keydown', preventDefaultForScrollKeys, false);
}
// call this to Enable
function enableScroll() {
window.removeEventListener('DOMMouseScroll', preventDefault, false);
window.removeEventListener(wheelEvent, preventDefault, wheelOpt);
window.removeEventListener('touchmove', preventDefault, wheelOpt);
window.removeEventListener('keydown', preventDefaultForScrollKeys, false);
}