-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
136 lines (133 loc) · 4.43 KB
/
Copy pathscript.js
File metadata and controls
136 lines (133 loc) · 4.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
const navbarToggle = document.querySelector(".navbar-toggle");
const navbarMenu = document.querySelector(".navbar-menu");
if (navbarToggle && navbarMenu) {
navbarToggle.addEventListener("click", () => {
const isActive = navbarToggle.classList.toggle("active");
navbarMenu.classList.toggle("active");
navbarToggle.setAttribute("aria-expanded", isActive ? "true" : "false");
});
document.querySelectorAll(".navbar-menu a").forEach((link) => {
link.addEventListener("click", () => {
navbarToggle.classList.remove("active");
navbarMenu.classList.remove("active");
navbarToggle.setAttribute("aria-expanded", "false");
});
});
}
// Testimonials slider
let currentSlide = 0;
let autoSlide;
let slideCont = document.getElementById("slider");
function showSlide(index) {
let slides = document.querySelectorAll("#slide-card");
if (index >= slides.length) {
currentSlide = 0;
} else if (index < 0) {
currentSlide = slides.lenght - 1;
} else {
currentSlide = index;
}
let offset = -currentSlide * 100;
document.querySelector("#slides").style.transform = `translateX(${offset}%)`;
}
function moveSlide(direction) {
showSlide(currentSlide + direction);
}
function startAutoSlide() {
autoSlide = setInterval(() => moveSlide(1), 2000);
}
function stopAutoSlide() {
clearInterval(autoSlide);
}
document.addEventListener("DOMContentLoaded", () => {
showSlide(currentSlide);
startAutoSlide();
document
.addEventListener("next")
.addEventListener("click", () => moveSlide(1));
document
.getElementById("prev")
.addEventListener("click", () => moveSlide(-1));
const slider = document.getElementById("slider");
slider.addEventListener("mouseenter", stopAutoSlide);
slider.addEventListener("mouseleave", startAutoSlide);
});
// Impact metrics count-up on each view
const metricNumbers = document.querySelectorAll(".metric-number");
if (metricNumbers.length > 0) {
const easeOut = (t) => 1 - Math.pow(1 - t, 3);
const animateValue = (el, to, duration = 1500) => {
if (el.dataset.animating === "true") return; // prevent overlap
el.dataset.animating = "true";
const start = 0;
const startTime = performance.now();
const format = (v) => Math.floor(v).toLocaleString();
const step = (now) => {
const progress = Math.min((now - startTime) / duration, 1);
const eased = easeOut(progress);
el.textContent = format(start + (to - start) * eased);
if (progress < 1) requestAnimationFrame(step);
else el.dataset.animating = "false";
};
el.textContent = "0";
requestAnimationFrame(step);
};
const io = new IntersectionObserver(
(entries) => {
entries.forEach((entry) => {
const el = entry.target;
const target = parseInt(el.getAttribute("data-target") || "0", 10);
if (entry.isIntersecting) {
animateValue(el, target);
}
});
},
{ threshold: 0.6 }
);
metricNumbers.forEach((el) => io.observe(el));
}
// Back to top (mobile)
const backToTopBtn = document.getElementById("backToTop");
const toggleBackToTop = () => {
if (!backToTopBtn) return;
if (window.scrollY > 300) backToTopBtn.classList.add("visible");
else backToTopBtn.classList.remove("visible");
};
window.addEventListener("scroll", toggleBackToTop);
backToTopBtn?.addEventListener("click", () => {
window.scrollTo({ top: 0, behavior: "smooth" });
});
toggleBackToTop();
// Read More functionality
document.addEventListener("DOMContentLoaded", () => {
const readMoreBtn = document.querySelector(".read-more-btn");
const moreText = document.querySelector(".more-text");
if (readMoreBtn && moreText) {
readMoreBtn.addEventListener("click", (e) => {
e.preventDefault();
if (moreText.style.display === "none" || moreText.style.display === "") {
moreText.style.display = "inline";
readMoreBtn.textContent = "Read Less";
} else {
moreText.style.display = "none";
readMoreBtn.textContent = "Read More";
}
});
}
});
document.querySelectorAll(".team-box").forEach((card) => {
const btn = card.querySelector(".read-more-text")
const more = card.querySelector(".more-text")
if (btn && more){
btn.addEventListener("click", (e) => {
e.preventDefault()
if (more.style.display === "inline"){
more.style.display = "none"
btn.textContent = "Read More"
}else {
more.style.display = "inline"
btn.textContent = "Read Less"
}
})
}
})