Skip to content

Instantly share code, notes, and snippets.

View realtomaszkula's full-sized avatar

Tomasz Kula realtomaszkula

View GitHub Profile
const scroll$ = fromEvent(window, 'scroll').pipe(
throttleTime(10),
);
@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(
const scroll$ = fromEvent(window, 'scroll').pipe(
throttleTime(10),
map(() => window.pageYOffset),
pairwise(),
);
trigger('toggle', [
state(
VisibilityState.Hidden,
style({ opacity: 0, transform: 'translateY(-100%)' })
),
state(
VisibilityState.Visible,
style({ opacity: 1, transform: 'translateY(0)' })
),
transition('* => *', animate('200ms ease-in'))
enum VisibilityState {
Visible = 'visible',
Hidden = 'hidden'
}
@HostBinding('@toggle')
get toggle(): VisibilityState {
return this.isVisible ? VisibilityState.Visible : VisibilityState.Hidden;
}