Как программно временно отключить автоматическую прокрутку веб-страницы
Тестирую drag & drop в chrome. Там есть режим, эмулирующий мобильное устройство. Мышка становится как бы пальцем, а вместо событий мыши генерируются события touch. Чтобы кое-что проверить, мне нужно переместить элемент в левую верхнюю треть страницы. И вот что я случайно нашёл: как только я, зажав элемент и ведя туда, влево, дохожу до 1/3 окна, начинается автоматическая прокрутка страницы в противоположную от направления движения сторону, так, будто я не перемещаю элемент, а просто пытаюсь подвинуть страницу жестом "влево". Делает это сам браузер, потому что в коде я нигде страницу не двигаю. В результате та область, куда мне нужно переместить элемент, "уплывает" влево
Подозреваю, что при начале перемещения (ontouchstart) нужно как-то отменить прокрутку страницы по умолчанию на время перемещения элемента, но как это сделать? И как потом (в конце обработки ontouchend) вернуть возможность прокрутки обратно?
В поиске нашёл лишь этот код:
function disableScroll() {
scrollTop = window.pageYOffset || document.documentElement.scrollTop;
scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,
window.onscroll = function () {
window.scrollTo(scrollLeft, scrollTop);
};
}
function enableScroll() {
window.onscroll = function () {};
}
Но считаю его костылём, ведь, если я правильно понимаю, сотни раз в секунду будет вызываться этот код, что может быть весьма ресурсозатратно
Ответы (1 шт):
Кажется, нашёл решение.
Код такой:
function cancelScroll() {
document.body.style.overflow = "hidden";
}
function returnScroll() {
document.body.style.overflow = "visible";
}
Оставлю пока, вдруг кому пригодится