2012-03-13 5 views
4

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

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

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

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

Однако содержание скроллинг не будет работать, если выше включена.

Есть ли способ предотвратить перетаскивание страницы, но разрешить прокрутку?

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

scrollbar.refresh(); 

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

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

ответ

5

Добавьте это к голове HTML

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

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

ontouchmove="touchMove(event)" 

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

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

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

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

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

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

+0

Похоже, это отличное решение, но кто-нибудь действительно получил это, чтобы работать? Мне не повезло. – kaleazy

1

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

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

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

2
$(document).delegate('.ui-page', 'touchmove', false); 

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

Смежные вопросы