Skip to content

observeResize 工具函数

observeResize 函数用于监听 HTMLElement 元素的大小变化,并通过 RxJS 的 Observable 发出变化记录。

功能描述

此函数创建了一个 Observable,用于观察给定 HTMLElement 元素的大小变化。它使用了 ResizeObserver API 来实现,当元素的大小发生变化时,会发出一个包含变化记录的数组。

示例

typescript
observeResize(document.getElementById('myElement')).subscribe(entries => {
    console.log('Element size changed:', entries);
});

参数

参数名类型默认值描述
elementHTMLElement-需要观察大小变化的 HTMLElement 元素。

返回值

类型描述
Observable<ResizeObserverEntry[]>返回一个 Observable,其中包含 ResizeObserverEntry 的数组,用于记录每次大小变化的信息。

清理资源

该函数返回的 Observable 在订阅时会自动开始观察指定元素的大小变化,并在取消订阅时清理资源,停止观察并断开与目标的连接。

示例代码

html
<div class="view" #resizeElement>resize dom</div>
ts
import { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core';
import { takeUntilDestroyed } from '@sleeko/utils/operators';
import { observeResize } from '@sleeko/utils/tools';

@Component({
    selector: 'app-observe-resize',
    templateUrl: './observe-resize.component.html',
    styleUrls: ['./observe-resize.component.scss'],
})
export class ObserveResizeComponent implements AfterViewInit {
    @ViewChild('resizeElement') resizeElement!: ElementRef<HTMLElement>;
    private readonly takeUntilDestroyed = takeUntilDestroyed();

    ngAfterViewInit(): void {
        observeResize(this.resizeElement.nativeElement)
            .pipe(this.takeUntilDestroyed)
            .subscribe(entries => {
                console.log('Element size changed:', entries);
            });
    }
}