Подтвердить что ты не робот

IPhone Web App - Отключение/прокрутка тела в iOS8

Да, я знаю. Этот вопрос задавали тысячу раз. Благодаря всем вам, ребята, я смог найти решение, которое, наконец, выполнило эту работу для меня в <= iOS7. Однако после обновления до iOS 8 ничего не работает!

Что отлично работало для меня в iOS7

Css

html, body, .scrollable {
overflow: auto; 
-webkit-overflow-scrolling: touch;
}

JQuery

$(function() {
  $(document).on("touchmove", function(evt) { evt.preventDefault() });
  $(document).on("touchmove", ".scrollable", function(evt) { evt.stopPropagation() });
});

Другие решения, которые я пробовал:

Все здесь: iPhone Web App - остановка прокрутки тела

И здесь: iOS Safari - как отключить прокрутку, но разрешить прокручиваемые divs нормально?

И здесь: Отключить iOS Overscroll, но разрешить прокрутку тела

И еще...

Итак, кто-нибудь знает способ iOS8, позволяющий отключить эффект прокрутки тела за пределами прокрутки/bounce (помимо собственных решений, примененных к проектам телефонной связи)?

4b9b3361

Ответ 1

Так что это беспокоило меня уже много лет, и я наконец нашел решение!

Pre iOS8, Safari не имеет субпиксельной рендеринга. Теперь, когда есть субпиксельная рендеринг, высота объявленного элемента указана как десятичное число подпикселей, а высота прокрутки - фактическое выделенное целочисленное значение. Если вы укажете размеры в процентах, это может привести к тому, что высота будет на долю пикселя меньше, чем должна быть.

Вместо тестирования для

if (elem[0].scrollHeight > height) {
                    e.stopPropagation();
}

Тестирование для этого даст вам округленное число, соответствующее совпадению.

if (elem[0].scrollHeight > Math.ceil(height)) {
                    e.stopPropagation();
}

Ответ 2

Это, в сочетании с тем, что position: fixed становится более надежным, допускает некоторые интересные эффекты. Вы можете сделать прилив, чтобы освежиться с помощью простой фиксированной "подкладки", которая остается на месте, когда тело сбрасывается, тем самым раскрывая ее.

Чтобы ответить на ваш вопрос:

A touchmove, который отбрасывает (event.preventDefault()) событие, если выполняются следующие условия:

  • Событие далее, чем последнее.
  • Текущий элемент target и body находятся в scrollTop == 0
  • То же самое для вышеупомянутых двух условий, чтобы заботиться о нижнем резиновом натяжении (scrollTop + innerHeigh == scrollHeight)

Пожалуйста, дайте мне знать, если вы ищете более подробный axplantion, с удовольствием напишите его.

Ответ 3

это решенная проблема с preventOverScroll.js

Взгляните на www.digitpro.it/Takashi вкладки Promozioni и Altro Chi Siamo обеспечивают iframe с прокруткой и без прокрутки эффекта отскока:) не стесняйтесь смотреть на исходный код JS + CSS