Событие колеса мыши в Firefox зависает при полной прокрутке, но не в Chrome

#javascript #angular #firefox #mousewheel

#javascript #angular #firefox #колесо мыши

Вопрос:

У меня проблема с событием мыши в Firefox. Я хочу создать веб-сайт, состоящий из слайдов, как Fullpage.js делает, но я не хочу его использовать, и я решил сам внедрить систему. Но в Firefox событие прокрутки, похоже, останавливается несколькими запущенными событиями колеса мыши и, следовательно, анимацией замораживания.

Я создал угловую директиву, которая запускает событие «колесо» и вызывает с заданным временем функцию, определяющую направление прокрутки.

Затем я создал компонент, который вызывает эту директиву и определяет, что делать с ее результатом.

Вот как работает моя директива

 @Directive({ selector: '[appMouseWheel]' })
export class MouseWheelDirective implements OnInit {
  @Output() mouseWheelUp = new EventEmitter();
  @Output() mouseWheelDown = new EventEmitter();


  private mouse = new Subject<any>();
  private mouseObs = this.mouse.asObservable();

  @HostListener('wheel', ['$event']) onMouseWheel(event: any) {
    console.log('debounce');
    event.preventDefault();
    this.mouse.next(event);
  }

  public ngOnInit() {
    this.mouseObs.pipe(throttleTime(1000)).subscribe(x => this.mouseWheelFunc(x));
  }

  public mouseWheelFunc(event: any) {
    const delta = Math.max(-1, Math.min(1, (-event.deltaY || -event.detail)));

    if (delta > 0) {
      this.mouseWheelUp.emit(event);
    } else if (delta < 0) {
      this.mouseWheelDown.emit(event);
    }

    if (event.preventDefault) {
      event.preventDefault();
    }
  }
}
  

Он отлично работает с Chrome, но зависает с Firefox, как вы можете видеть прямо здесь: http://ukeep.monteil.co

Если у кого-нибудь есть ответ, я буду благодарен!

Комментарии:

1. Какая-либо ошибка в браузере Firefox?

2. Нет, как вы можете видеть по данной ссылке. Вы можете заставить его работать с Firefox с помощью «маленькой прокрутки» шаг за шагом с помощью мыши, но это не ожидаемое поведение :/