40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
document.addEventListener("DOMContentLoaded", () => {
|
|
// ── Register button
|
|
const regBtn = document.getElementById("reg-btn");
|
|
if (regBtn) {
|
|
regBtn.addEventListener("click", () => {
|
|
alert("Frontend skeleton only. Backend will be connected later.");
|
|
});
|
|
}
|
|
|
|
// ── Smooth scroll for all anchor links
|
|
document.querySelectorAll('a[href^="#"]').forEach((link) => {
|
|
link.addEventListener("click", (e) => {
|
|
const id = link.getAttribute("href").slice(1);
|
|
const target = document.getElementById(id);
|
|
if (!target) return;
|
|
e.preventDefault();
|
|
const headerH = document.querySelector(".header").offsetHeight;
|
|
const top =
|
|
target.getBoundingClientRect().top + window.scrollY - headerH - 16;
|
|
window.scrollTo({ top, behavior: "smooth" });
|
|
});
|
|
});
|
|
|
|
// ── Scroll reveal
|
|
const reveals = document.querySelectorAll(".reveal");
|
|
const io = new IntersectionObserver(
|
|
(entries) => {
|
|
entries.forEach((entry) => {
|
|
if (entry.isIntersecting) {
|
|
entry.target.classList.add("visible");
|
|
io.unobserve(entry.target);
|
|
}
|
|
});
|
|
},
|
|
{ threshold: 0.12 },
|
|
);
|
|
|
|
reveals.forEach((el) => io.observe(el));
|
|
});
|