Как программно временно отключить автоматическую прокрутку веб-страницы

Тестирую 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";
}

Оставлю пока, вдруг кому пригодится

→ Ссылка