ngx-scroll-event
v3.0.2
Published
Lightweight Angular directive that emits scroll events and detects when the user is reaching the top or bottom of an element or the window.
Downloads
4,802
Keywords
Readme
ngx-scroll-event
Lightweight Angular directive that emits scroll events and detects when the user is reaching the top or bottom of an element or the window.
Angular 21 · Node.js ^20.19, ^22.12, or ≥24
Features
- Element or window scroll — Use the same directive on a scrollable element or rely on window scroll.
- Top/bottom detection — Know when the user is near the top or bottom via configurable pixel offsets.
- Standalone & NgModule — Works with standalone components (default) or the classic module setup.
- Typed events —
NgxScrollEventincludesisReachingTop,isReachingBottom,originalEvent, andisWindowEvent.
Install
npm install ngx-scroll-eventyarn add ngx-scroll-eventpnpm add ngx-scroll-eventQuick start
Standalone (recommended)
Import the directive and add libScrollEvent plus the (onscroll) handler to any element (or the host for window scroll):
import { NgxScrollEventDirective, NgxScrollEvent } from 'ngx-scroll-event';
@Component({
standalone: true,
imports: [NgxScrollEventDirective],
template: `
<div libScrollEvent (onscroll)="onScroll($event)">
<!-- scrollable content -->
</div>
`,
})
export class MyComponent {
onScroll(event: NgxScrollEvent) {
if (event.isReachingBottom) console.log('Near bottom');
if (event.isReachingTop) console.log('Near top');
if (event.isWindowEvent) console.log('Window scroll');
}
}NgModule
import { NgxScrollEventModule } from 'ngx-scroll-event';
@NgModule({
imports: [NgxScrollEventModule],
})
export class AppModule {}Then in any template:
<div libScrollEvent (onscroll)="onScroll($event)">...</div>API
Directive: libScrollEvent
| Input | Type | Default | Description |
|----------------|----------|---------|--------------------------------------------------|
| topOffset | number | 100 | Pixels from top to consider "reaching top". |
| bottomOffset | number | 100 | Pixels from bottom to consider "reaching bottom".|
| Output | Type | Description |
|------------|--------------------|--------------------------------|
| onscroll | NgxScrollEvent | Fired on scroll (element or window). |
Event: NgxScrollEvent
interface NgxScrollEvent {
isReachingBottom: boolean; // true when scroll is within bottomOffset of bottom
isReachingTop: boolean; // true when scroll is within topOffset of top
originalEvent: Event; // native scroll event
isWindowEvent: boolean; // true when the scroll target is the window
}Examples
Custom offsets
<div
libScrollEvent
(onscroll)="onScroll($event)"
[topOffset]="50"
[bottomOffset]="200">
...
</div>Infinite scroll
onScroll(event: NgxScrollEvent) {
if (event.isReachingBottom && !this.loading) {
this.loading = true;
this.loadMore().finally(() => (this.loading = false));
}
}Window scroll (e.g. “back to top” button)
The directive listens to both the element and the window. Add it to any element (e.g. a root wrapper); in the handler, use event.isWindowEvent when you only care about window scroll:
template: `<div libScrollEvent (onscroll)="onScroll($event)">...</div>`
onScroll(event: NgxScrollEvent) {
if (event.isWindowEvent) {
this.showBackToTop = !event.isReachingTop;
}
}License
MIT · GitHub
