diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/imaging/components/imaging-thumbnail.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/imaging/components/imaging-thumbnail.element.ts index 1407b2f15b..cdcb474deb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/imaging/components/imaging-thumbnail.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/imaging/components/imaging-thumbnail.element.ts @@ -65,14 +65,33 @@ export class UmbImagingThumbnailElement extends UmbLitElement { #imagingRepository = new UmbImagingRepository(this); - protected override firstUpdated() { - this.#generateThumbnailUrl(); - } + #intersectionObserver?: IntersectionObserver; override render() { return html` ${this.#renderThumbnail()} ${when(this._isLoading, () => this.#renderLoading())} `; } + override connectedCallback() { + super.connectedCallback(); + + if (this.loading === 'lazy') { + this.#intersectionObserver = new IntersectionObserver((entries) => { + if (entries[0].isIntersecting) { + this.#generateThumbnailUrl(); + this.#intersectionObserver?.disconnect(); + } + }); + this.#intersectionObserver.observe(this); + } else { + this.#generateThumbnailUrl(); + } + } + + override disconnectedCallback() { + super.disconnectedCallback(); + this.#intersectionObserver?.disconnect(); + } + #renderLoading() { return html`
`; }