Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save sunzxs/620fbbe59e40cf23409d1f09bcc5e8ff to your computer and use it in GitHub Desktop.
Save sunzxs/620fbbe59e40cf23409d1f09bcc5e8ff 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