В 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/

Другие вопросы по тегам