-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
40 lines (34 loc) · 1.38 KB
/
index.js
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
document.addEventListener('DOMContentLoaded', function() {
let progressBars = Array.from(document.getElementsByClassName('progress-bar'));
let percentageValues = Array.from(document.getElementsByClassName('percentage-value'));
function isElementInViewport(el) {
const rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
);
}
function onScroll() {
progressBars = progressBars.filter(element => {
if (isElementInViewport(element)) {
var targetPercentage = element.getAttribute('data-percentage');
element.style.width = `${targetPercentage}%`;
return false;
}
return true;
});
percentageValues = percentageValues.filter(element => {
if (isElementInViewport(element)) {
var targetPercentage = element.getAttribute('data-percentage');
element.innerText = `${targetPercentage}%`;
return false;
}
return true;
});
}
window.addEventListener('scroll', onScroll);
// Initial check in case elements are already in view
onScroll();
});