stylescape
Version:
Stylescape is a visual identity framework developed by Scape Agency.
73 lines (65 loc) • 2.23 kB
text/typescript
/**
* Handles vertical scrolling behavior using arrow buttons.
* Scrolls to specific sections of the page and toggles button visibility.
*/
export class VerticalScrollManager {
private readonly buttonUp: HTMLElement | null
private readonly buttonDown: HTMLElement | null
private readonly scrollThreshold = 100
private readonly scrollOffset = -100 // Used for down scroll to offset from top
constructor() {
this.buttonUp = document.getElementById("cover_arrow--up")
this.buttonDown = document.getElementById("content_cover_arrow")
if (this.buttonUp) {
this.buttonUp.addEventListener(
"click",
this.scrollToContentTop.bind(this),
)
window.addEventListener(
"scroll",
this.updateUpButtonVisibility.bind(this),
)
this.updateUpButtonVisibility() // Initial state
}
if (this.buttonDown) {
this.buttonDown.addEventListener(
"click",
this.scrollToMainSection.bind(this),
)
}
}
/**
* Scroll to the element with ID 'content_cover'
*/
private scrollToContentTop(): void {
const element = document.getElementById("content_cover")
if (element) {
const top =
element.getBoundingClientRect().top + window.pageYOffset
window.scrollTo({ top, behavior: "smooth" })
}
}
/**
* Scroll to the element with ID 'main' with an offset
*/
private scrollToMainSection(): void {
const element = document.getElementById("main")
if (element) {
const top =
element.getBoundingClientRect().top +
window.pageYOffset +
this.scrollOffset
window.scrollTo({ top, behavior: "smooth" })
}
}
/**
* Show or hide the up button based on scroll position
*/
private updateUpButtonVisibility(): void {
if (!this.buttonUp) return
this.buttonUp.style.display =
window.scrollY > this.scrollThreshold ? "block" : "none"
}
}
// Usage
new VerticalScrollManager()