NgSwipe и горизонтальная прокрутка
У меня возникают проблемы с объединением ng-swipe
и горизонтальной прокруткой на мобильном телефоне. Вариант использования заключается в том, что у меня есть страница, которая на swiping должна загружаться следующим или предыдущим и внутри есть модули, которые показывают много информации. Некоторые из них прокручиваются.
Итак, как только вы прокрутите салфетки на родителях, и вы получите навигацию. Поэтому я поместил еще пару ng-swipe
в родительский элемент прокручиваемого элемента с таким видом обмана:
self.onInnerSwipe = function($event) {
$event.originalEvent.preventAction = true;
};
И затем на родительском:
var shouldActionProceed = function($event) {
return !$event || !$event.originalEvent || !$event.originalEvent.preventAction;
};
self.goToPrev = function($event) {
if (shouldActionProceed($event)){
// Do Magic
}
}
Это трюк в том, что действие не выполняется, если я прокручиваю этот элемент, но прокрутка действительно не работает. Это похоже, но это не так. Он начинается немного, а затем останавливается.
В Chrome иногда записываются предупреждения.
Игнорированная попытка отменить событие touchmove с cancelable = false, для например, потому что выполняется прокрутка и не может быть прервана.
Я подготовил демо: http://jsbin.com/webologavu/2/, который слишком упрощен, но вы можете воспроизвести проблему.
Любые подсказки?
Ответы
Ответ 1
Я думаю, что это проблема concurrency с этими событиями. Это может сработать лучше, если ваше родительское событие не полагается на дочернее событие. Для этого:
//add a identifier to your list element
<ul class="myList" your-other-attrs></ul>
//should proceed can rely on the target element to find out
//if the target element belongs (or is) in your list.
var shouldActionProceed = function($event) {
return !$($event.target).hasClass("myList") && //is myList?
$($event.target).parents(".myList").length == 0; //has parent 'myList'?
};
Таким образом, родительское событие может работать на нем.