This commit is contained in:
50
assets/js/counter.js
Normal file
50
assets/js/counter.js
Normal file
@@ -0,0 +1,50 @@
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
var elements = document.querySelectorAll(".scroll-counter")
|
||||
elements.forEach(function (item) {
|
||||
item.counterAlreadyFired = false
|
||||
item.counterSpeed = item.getAttribute("data-counter-time") / 45
|
||||
item.counterTarget = +item.innerText
|
||||
item.counterCount = 0
|
||||
item.counterStep = item.counterTarget / item.counterSpeed
|
||||
|
||||
item.updateCounter = function () {
|
||||
console.log(45);
|
||||
item.counterCount = item.counterCount + item.counterStep
|
||||
item.innerText = Math.ceil(item.counterCount)
|
||||
|
||||
if (item.counterCount < item.counterTarget) {
|
||||
setTimeout(item.updateCounter, item.counterSpeed)
|
||||
} else {
|
||||
item.innerText = item.counterTarget
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
var isElementVisible = function isElementVisible(el) {
|
||||
var scroll = window.scrollY || window.pageYOffset
|
||||
var boundsTop = el.getBoundingClientRect().top + scroll
|
||||
var viewport = {
|
||||
top: scroll,
|
||||
bottom: scroll + window.innerHeight,
|
||||
}
|
||||
var bounds = {
|
||||
top: boundsTop,
|
||||
bottom: boundsTop + el.clientHeight,
|
||||
}
|
||||
return (
|
||||
(bounds.bottom >= viewport.top && bounds.bottom <= viewport.bottom) ||
|
||||
(bounds.top <= viewport.bottom && bounds.top >= viewport.top)
|
||||
)
|
||||
}
|
||||
|
||||
var handleScroll = function handleScroll() {
|
||||
elements.forEach(function (item, id) {
|
||||
if (true === item.counterAlreadyFired) return
|
||||
if (!isElementVisible(item)) return
|
||||
item.updateCounter()
|
||||
item.counterAlreadyFired = true
|
||||
})
|
||||
}
|
||||
window.addEventListener("scroll", handleScroll)
|
||||
|
||||
})
|
||||
Reference in New Issue
Block a user