угловая проверка, была ли прокрутка запущена вручную или из скрипта - PullRequest
0 голосов
/ 27 февраля 2019

Я работаю с Angular 7, и у меня есть директива, которая прослушивает прокрутку элемента.Проблема в том, что я хочу, чтобы директива отвечала только на ручную прокрутку и игнорировала программные прокрутки, выполненные с помощью element.scrollTop = x.Директива содержит прослушиватель прокрутки, например:

@HostListener('scroll', ['$event'])
  onScroll($event) {
  }

В одном из мест в моем коде я установил программный scrollTop, как описано выше, и прослушиватель прослушал событие.Я попытался найти свойство на $event, которое указывало бы, было ли событие ручным или нет, но не смог найти его.Я пропустил это?Или, может быть, я могу каким-то образом вызвать пользовательское событие в vanilla javascript, которое будет содержать такое указание (я знаю, что в jQuery вы можете сделать это, но я здесь не использую jQuery ...).Благодарю.

1 Ответ

0 голосов
/ 27 февраля 2019

Просто добавьте флаг и установите его в false перед ручной прокруткой.

Не забудьте установить флаг обратно в true в обработчике прокрутки

private handleScroll = true;

@HostListener('scroll', ['$event'])
onScroll($event) {
  if (!this.handleScroll) {
    this.handleScroll = true;
    return;
  }
}

public manualScroller() {
  this.handleScroll = false;

  this.element.scrollTop = 100;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...