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'?
};

Таким образом, родительское событие может работать на нем.