【问题标题】:How to pass window:scroll target using @HostListener to trigger an Observable.fromEvent() subscription?如何使用 @HostListener 传递 window:scroll 目标来触发 Observable.fromEvent() 订阅?
【发布时间】:2023-03-09 16:30:02
【问题描述】:

我想保留@HostListner 中使用的类似语法,并从该事件中使用fromEvent() 创建一个流。当前滚动未触发fromEvent 订阅。

问题: 如何触发var source = Observable.fromEvent(target, 'window:scroll');

import { Directive, HostListener } from '@angular/core';
import {Observable} from "rxjs";
import 'rxjs/add/observable/fromEvent';

@Directive({
  selector: '[mh-scroll]'
})
export class MhScroll {
  lastKnownScrollPosition: number;
  ticking: boolean;

  constructor() {
    this.lastKnownScrollPosition = 0;
    this.ticking = false;
  }


    isElementCloseToTop(target) {

      var source = Observable.fromEvent(target, 'window:scroll'); //this never triggers.

      var subscription = source.subscribe(
          (x) => {
            console.log('Next: Clicked!');
          },
          (err) => {
            console.log('Error: %s', err);
          },
          () => {
            console.log('Completed');
          });

      this.ticking = false;
    }


    @HostListener('window:scroll', ['$event.target'])
    triggeredScroll(target) {
      this.lastKnownScrollPosition = window.scrollY;

      if (!this.ticking) {
        window.requestAnimationFrame(this.isElementCloseToTop.bind(this, target));
      }

      this.ticking = true;
    }
}

【问题讨论】:

    标签: javascript angular rxjs observable dom-events


    【解决方案1】:

    我发现这很有用:

    Observable.fromEvent(window, 'wheel')
    

    【讨论】:

      【解决方案2】:

      我想应该是

      var source = Observable.fromEvent(window, 'scroll');
      

      【讨论】:

        猜你喜欢
        • 2021-12-07
        • 1970-01-01
        • 2017-07-16
        • 2020-03-27
        • 2019-12-30
        • 1970-01-01
        • 2020-01-05
        • 2021-01-14
        • 2019-11-06
        相关资源
        最近更新 更多