javascript - ngSwipe и горизонтальная прокрутка



angularjs javascript-events (1)

У меня проблемы с сочетанием ng-swipe и горизонтальной прокрутки на мобильном телефоне. Вариант использования: у меня есть страница, которая при смахивании должна загружаться следующей или предыдущей, а внутри есть модули, которые показывают много информации. Некоторые из них прокручиваются.

Итак, как только вы прокрутите свайп на родительском пике, вы начнете навигацию. Таким образом, я поместил еще одну пару 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 с cancellable = false, например, потому что прокрутка выполняется и не может быть прервана.

Я подготовил демо здесь: http://jsbin.com/webologavu/2/ которое слишком упрощено, но вы можете воспроизвести проблему.

Есть намеки?


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

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

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





touch