import { LitElement, html } from "lit";
import { query } from "lit/decorators.js";
export type IntersectEvent = CustomEvent<{
entry: IntersectionObserverEntry;
}>;
/**
* Observe element with Intersection Obserer API.
*
* @example Usage:
* ```
*
* Observe me!
*
* ```
*
* @event intersect { entry: IntersectionObserverEntry }
*/
export class Observable extends LitElement {
@query(".target")
private target?: HTMLElement;
private observer?: IntersectionObserver;
connectedCallback(): void {
super.connectedCallback();
this.observer = new IntersectionObserver(this.handleIntersect);
}
disconnectedCallback(): void {
this.observer?.disconnect();
}
firstUpdated() {
this.observer?.observe(this.target!);
}
private handleIntersect = ([entry]: IntersectionObserverEntry[]) => {
this.dispatchEvent(
new CustomEvent("intersect", {
detail: { entry },
})
);
};
render() {
return html`
`;
}
}