, . , / . , navbar , - .
<navbar-component></navbar-component>
<content-component></content-component>
, , ( , , ). debounce timeout . - :
<content-component (scroll)="scrollFunction()"></content-component>
.... and then somewhere in the code for the component that hosts both the navbar and content ...
timeout: any;
isScrolling: boolean = false;
scrollFunction() : void {
this.isScrolling = true;
clearTimeout(this.timeout);
this.timeout = setTimeout(()=> {
this.isScrolling = false
}, 1000);
}
1000 - , , , isScrolling true , , reset false . clearTimeout , reset 0, . , navbar, , isScrolling , .
<navbar-component [class.navbar-hidden]="isScrolling"></navbar-component>
<content-component (scroll)="scrollFunction()"></content-component>
, , DOM. jQuery . , , , . ,
(scroll)="scrollFunction()"
to
(window:scroll)="scrollFunction()"
- , (.. navbar), HostListener . () HTML, -:
import { Component, HostListener, ....(anything else you have...) } from '@angular/core'
:
@HostListener('scroll') myScrollFunction() {
... same code here as above....
}
, , . , CSS navbar , .:-)
EDIT: , , . , - , , isScrolling . , :
<navbar-component [class.navbar-hidden]="isScrollingDown"></navbar-component>
<content-component (scroll)="scrollFunction($event)"></content-component>
...
isScrollingDown: boolean;
lastScrollPosition: number;
scrollFunction($event) : void {
let newPosition = $event.srcElement.scrollTop;
if (newPosition <= this.lastScrollPosition){
isScrollingDown = false;
}
else {
isScrollingDown = true;
}
this.lastScrollPosition = newPosition;
}
scrollTop - DOM, .
HostListener, $event.
@HostListener('scroll', ['$event']) myScrollFunction($event){
... similar code here...
}