Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save realtomaszkula/918d542a00aae05a7fb1f4dd281215d1 to your computer and use it in GitHub Desktop.
Save realtomaszkula/918d542a00aae05a7fb1f4dd281215d1 to your computer and use it in GitHub Desktop.
@Component({
selector: 'app-sticky-header',
template: `<ng-content></ng-content>`,
styles: [ ... ]
})
export class StickyHeaderComponent implements AfterViewInit {
private isVisible = true;
ngAfterViewInit() {
const scroll$ = fromEvent(window, 'scroll').pipe(
throttleTime(10),
map(() => window.pageYOffset),
pairwise(),
map(([y1, y2]): Direction => (y2 < y1 ? Direction.Up : Direction.Down)),
distinctUntilChanged(),
share()
);
const scrollUp$ = scroll$.pipe(
filter(direction => direction === Direction.Up)
);
const scrollDown = scroll$.pipe(
filter(direction => direction === Direction.Down)
);
scrollUp$.subscribe(() => (this.isVisible = true));
scrollDown.subscribe(() => (this.isVisible = false));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment