2016-09-25 6 views
1

私はang 2でonScrollイベントを聞こうとしていますが、次のコードを作成しましたが、すべてのスクロールイベントが次に呼び出されており、ブラウザのパフォーマンスが低下しています。 observer.next関数は非常に軽量で、サブスクライバでのデバウンスは十分ではあるが、それほど軽くないか、何か間違っていることを望んでいた。誰かが効果的にデバウンスするのを助けることができますか?あなたのコード.debounceTime(400)角度2でオブザーバー関数をデバウンスする方法はありますか?

import {Component, Renderer, OnInit} from "@angular/core"; 
import {Subject, Observable, Observer} from "rxjs"; 
@Component({ 
selector: 'heading', 
templateUrl: './heading.component.html', 
styles: [require('./heading.component.scss')] 
}) 

export class HeadingComponent implements OnInit { 

observable: Observable<Event>; 

constructor(private renderer: Renderer) { 
    this.observable = new Observable<Event>(
     (observer: Observer<Event>) => { 
      this.renderer.listenGlobal('window', 'scroll', (evt: Event) => { 
       observer.next(evt); 
     }) 
     } 
    ); 
} 

ngOnInit(): void { 
    this.observable 
     .debounceTime(400) 
     .subscribe(
      (evt: Event) => console.log('next event' + evt), 
      (err: string) => console.error(err), 
      () => console.info('done') 
     ) 
    } 
} 

答えて

1

私は(角ギッターからDzmitry &ライアンのおかげで)次のようにこれを行うには正しい方法が実際にあることがわかった返信用

constructor() { 
    this.observable = Observable.fromEvent(window, 'scroll') 
     .debounceTime(400) 
     .map(() => window.scrollY) 
} 
1

.debounce(400)と交換してください。

参照ドキュメント:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/debounce.md

+0

おかげで、しかし、私がしようとすると私はタイプスクリプトのコンパイルエラーが発生しました - タイプ 'number'の引数がタイプ '(値:イベント)のパラメータに割り当てられません... タイプを同じイベントでイベントからanyに変更しようとしました – SMC

関連する問題