jQuery Mobile - включить прокрутку, отключить перетаскивание страницы - PullRequest
4 голосов
/ 13 марта 2012

В настоящее время я разрабатываю приложение для iOS, используя phonegap 1.5 и jQuery Mobile.

Я понимаю, что мы можем отключить перетаскивание страниц, используя следующий javascript:

function preventBehavior(e)  
{ 
    e.preventDefault(); 
};

document.addEventListener("touchmove", preventBehavior, false);

Однако прокрутка контента будетне работает, если вышеупомянутое включено.

Можно ли как-то запретить пользователям перетаскивать страницу, но разрешить прокрутку?

Я пытался использовать iScroll.Для этого мне нужно было бы вручную сделать

scrollbar.refresh(); 

под событием pageinit на каждой странице.К сожалению, у меня есть много страниц, которые требуют прокрутки.= (

Есть ли другие способы, которые я могу использовать, чтобы включить прокрутку без использования сторонних плагинов?

Ответы [ 3 ]

5 голосов
/ 27 марта 2012

Добавить в HTML-заголовок

<script type="text/javascript">
    touchMove = function(event) {
        event.preventDefault();
    }
</script>

затем установите

ontouchmove="touchMove(event)"

в самом внешнем div для каждой страницы, которую вы хотите отключить перетаскиванием. Пример:

<div id="mypage" ontouchmove="touchMove(event)">

Перетаскивание будет возможно для страниц, которые не имеют ontouchmove = "touchMove (event)" .

Это решение требует, чтобы вы не включали код темплета телефонного зазора для функции protectBehavior () . Удалите или закомментируйте это:

//function preventBehavior(e) 
//{ 
//    e.preventDefault();
//};
//document.addEventListener("touchmove", preventBehavior, false);

Более подробная информация здесь: http://phonegap.pbworks.com/w/page/16494815/Preventing-Scrolling-on-iPhone-Phonegap-Applications

2 голосов
/ 06 мая 2013
$(document).delegate('.ui-page', 'touchmove', false);

Скорее всего, это будет работать, будет зависеть от того, что вы хотите, чтобы касание было отключено.

1 голос
/ 02 января 2013

Я использую jQuery Mobile, и у меня работает следующее (выполнено на DOM ready):

$('body').on('touchmove', function(e) {
    e.preventDefault();
});

Обратите внимание, что возвращение false или вызов e.stopPropagation () приведет к тому, что дети тела не будутответить на событие «TouchMove» также.Возможно, вы делаете это в одном из ваших обработчиков событий, который останавливает всплытие событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...