В Safari на iPad есть способ остановить резиновую полосу страницы, НО все же разрешить переполнение слишком прокрутки?
Есть много фрагментов, чтобы остановить резиновые полосы на iPad, как показано ниже:
document.body.addEventListener('touchmove',function(event){ event.preventDefault(); },false);
Однако это имеет нежелательный эффект предотвращения прокрутки всех элементов div с переполнением на них?
Есть ли способ просто сверху страницы (тела) от резиновых полос, в то же время позволяя переполненным прокручиваемым элементам div делать это?
1 ответ
Кажется, что резиновое связывание всей страницы происходит, когда пользователь выполняет прокрутку с самого низа или самого верха элемента div. Код, который я написал, проверяет, действительно ли пользователь находится в одной из этих крайностей, и, если да, предотвращает прокрутку в этих направлениях.
elem.bind("touchstart", function( e )
{
xStart = e.originalEvent.changedTouches[0].screenX;
yStart = e.originalEvent.changedTouches[0].screenY;
});
elem.bind("touchmove", function( e )
{
var xMovement = e.originalEvent.changedTouches[0].screenX - xStart;
var yMovement = e.originalEvent.changedTouches[0].screenY - yStart;
if( elem.scrollTop() == (elem[0].scrollHeight - elem[0].clientHeight) && yMovement < 0 )
{
e.preventDefault();
}
else if( elem.scrollTop() == 0 && yMovement > 0 )
{
e.preventDefault();
}
e.stopPropagation();
});
Обновление: включая рабочую демонстрационную ссылку jsfiddle: http://jsfiddle.net/qQHrM/1/