scrolled-header
Version:
Add active class to fixed header while scrolling down and remove when scrolling up.
62 lines (54 loc) • 1.59 kB
text/typescript
interface dataInterface {
target: HTMLElement,
offset?: number,
className?: string,
backScroll ?: boolean
}
export default class Header {
target = null;
offset;
className;
scroller = 0;
toggler = false;
backScroll = true;
private toggle() {
let scroll = document.documentElement.scrollTop;
if(this.scroller - scroll < this.offset && scroll - this.scroller < this.offset) return false;
let oldScroller = this.scroller;
this.scroller = scroll;
if (oldScroller > this.scroller && this.backScroll) {
if (this.toggler) {
this.target.classList.remove(this.className);
this.toggler = false;
}
} else {
if (this.scroller > this.offset && !this.toggler) {
this.target.classList.add(this.className);
this.toggler = true;
} else if (this.scroller <= this.offset && this.toggler) {
this.target.classList.remove(this.className);
this.toggler = false;
}
}
}
private toggleHandler = () => {
this.toggle()
}
constructor({target, offset = 50, className = "scrolled", backScroll = true}: dataInterface) {
if (!target) throw new Error("The Header Element is required");
this.target = target;
this.offset = offset;
this.className = className;
this.scroller = 0;
this.toggler = false;
this.backScroll = backScroll
if (this.target) {
this.toggle();
window.addEventListener("scroll", this.toggleHandler);
}
return this;
}
public stop() {
window.removeEventListener("scroll", this.toggleHandler);
}
}