Определите области для сенсорных событий, используя ngTouch

Я работаю над веб-приложением AngularJs и только что начал использовать ngTouch для распознавания пролистывания влево и вправо. Я хочу использовать это для открытия и закрытия меню боковой панели. В настоящее время это работает, и меню открывается и закрывается, однако, у меня есть события смахивания, привязанные ко всей оболочке, вот так <div ng-style="body_style" id="wrapper" ng-swipe-right="showMenu()" ng-swipe-left="hideMenu()"> что делает все приложение областью смахивания. Я хотел бы иметь возможность установить его только на область в верхнем левом квадранте приложения, например, так: идеальная сенсорная зона красного цвета

Это позволит мне настроить другие области прокрутки для дополнительной функциональности, а не ограничиваться только одной областью.

Я знаю, что могу сделать div и поместить его туда с определенной шириной и высотой, но div будет блокировать содержимое в других областях, так что, когда кто-то "щелкает" что-то, он фактически щелкает невидимым div для области перелистывания, Я знаю, что должен быть способ обойти это, но я не могу думать об этом.

tldr: Как мне настроить область для захвата событий смахивания, которые не будут влиять на интерактивность других элементов, которые могут быть ниже?

1 ответ

Решение

В источнике angular-touch он использует функцию bind. Привязка берет элемент, который должен отслеживаться для считываний и отслеживает его события, такие как запуск. Поэтому, если вы хотите, вы можете изменить исходный код, чтобы прекратить выполнение остальной части кода, если начало находится вне некоторой координаты x или y, которую вы установили.

Вы можете изменить этот код,

pointerTypes = pointerTypes || ['mouse', 'touch'];
element.on(getEvents(pointerTypes, 'start'), function(event) {
     startCoords = getCoordinates(event);
     active = true;
     totalX = 0;
     totalY = 0;
     lastPos = startCoords;
     eventHandlers['start'] && eventHandlers['start'](startCoords, event);
});

Чтобы что-то вроде этого:

pointerTypes = pointerTypes || ['mouse', 'touch'];
element.on(getEvents(pointerTypes, 'start'), function(event) {
     startCoords = getCoordinates(event);
     if (startCoords.y <= 400 && startCoords.y >= 100 && startCoords.x <=500) {
         active = true;
         totalX = 0;
         totalY = 0;
         lastPos = startCoords;
         eventHandlers['start'] && eventHandlers['start'](startCoords, event);
     }
});

Вид некрасивого хака, но это сработает.

Другие вопросы по тегам