Отключить резиновую ленту в полноэкранном веб-приложении iOS

У меня есть полноэкранное веб-приложение, работающее на iOS. Когда я смахиваю вниз, экран прокручивается с эффектом резиновой ленты (подпрыгивая). Я хочу заблокировать весь документ, но по-прежнему разрешать прокрутку div с помощью overflow-y: прокручивайте там, где это необходимо.

я экспериментировал с

document.ontouchmove = function(e){ 
    e.preventDefault(); 
}

но это отключает прокрутку в любом контейнере. Любая идея? Большое Вам спасибо.


person Thomas    schedule 11.11.2013    source источник


Ответы (1)


Вызов preventDefault для события на самом деле правильный, но вы не хотите делать это для каждого компонента, поскольку это также предотвратит прокрутку в div (как вы упомянули) и, например, скольжение по входным данным диапазона. Поэтому вам нужно добавить проверку в обработчик онточмове, чтобы увидеть, касаетесь ли вы компонента, которому разрешена прокрутка.

У меня есть реализация, которая использует обнаружение класса CSS. Компоненты, которым я хочу разрешить касание, просто имеют назначенный класс.

document.ontouchmove = function (event) {
    var isTouchMoveAllowed = false;
    var p = event.target;

    while (p != null) {
        if (p.classList && p.classList.contains("touchMoveAllowed")) {
            isTouchMoveAllowed = true;
            break;
        }
        p = p.parentNode;
    }

    if (!isTouchMoveAllowed) {
        event.preventDefault();
    }

});
person Christophe Herreman    schedule 27.01.2014
comment
Есть ли способ сделать обратное? Итак, разрешить прокрутку чего угодно БЕЗ этого класса? - person cbmtrx; 09.04.2015