ウィンドウのサイズが変更されるたびにメソッドを呼び出す必要があります。私は次のコードを使用しています:Angular2:onResizeメソッドを複数回起動する
@HostListener('window:resize', ['$event'])
onResize(event) {
}
しかし、私はブラウザのサイズを変更するときはいつでも、問題は、複数回発射されています。
ウィンドウのサイズが変更されるたびにメソッドを呼び出す必要があります。私は次のコードを使用しています:Angular2:onResizeメソッドを複数回起動する
@HostListener('window:resize', ['$event'])
onResize(event) {
}
しかし、私はブラウザのサイズを変更するときはいつでも、問題は、複数回発射されています。
サイズ変更は、複数のイベントをトリガーする可能性がある時に単一のイベントにそれを絞り込むために、シーケンスにすべてのイベントを送信し、(デバウンスまたはスロットル)デバウンスを行う時だけ何を処理するために:
あなたのコンストラクタ、またはngOnInitで次にresizeEvent$: Subject<MouseEvent> = new Subject<MouseEvent>();
@HostListener('window:resize', ['$event'])
onResize(event){
this.resizeEvent$.next(event);
}
:
this.resizeEvent$.debounceTime(100).subscribe(this.actualResizeHandler);
これが最後のresizeイベント後のみ100ミリ秒は、したがって、複数のイベントを無視して、サイズを変更処理するだろう解雇ことを保証します。イベントがある限り、これは飢餓原因につながる可能性があることに注意してください。デバウンスはブロックされます。
this.resizeEvent$.throttleTime(500).debounceTime(490).subscribe(this.actualResizeHandler);
スロットルは、以下のものを落とし、各500ミリ秒で唯一の最初のイベントがトリガされますことを提供し、デバウンスは、あなたが実際に行う用意されています。別のアプローチは、この例では、すべての500ミリ秒に、チャンクにそれになりますスロットルがその期間中に他のイベントがないことを確実にして、デバウンスが最終的にトリガするので、その期間の終わりの作業は機能します。
2つのことノートへ:
ブラウザのサイズを変更するにはどうすればよいですか?ドラッグしてサイズを変更すると、ピクセル移動ごとにサイズが変更され、ドラッグで停止したときにはサイズ変更されないため、複数回点滅します(これが予想通りの場合)。ドラッグする代わりに、ウィンドウを最大化して復元することができます。これにより、イベントが一度発生するはずです。 – hakany
@ hakany Firefoxのレスポンシブデザインモードを使用してサイズを変更しています – deen
リサイズが徐々に(つまり、一度に数ピクセル)行われるため、連続したイベントが発生する可能性があります。それを一度だけ処理する解決策は大丈夫でしょうか? – Meir