I have a simple jQuery code that works perfectly (and I would like to keep). The problem is that this animation is in a section below on page and it starts running when the page loads. I need this animation (numbers start at 0 and run until the number I put in the divs) to happen only when the user scroll and reaches that div. I searched on google and here on StackOverflow but the solutions that I found didn't work or required a plugin (which I don't wanna use).
Here's the Demo code that I have until the moment: https://jsfiddle.net/aj7Lk2bw/2/
the jQuery is:
$('.value').each(function () {
$(this).prop('Counter',0).animate({
Counter: $(this).text()
}, {
duration: 4000,
easing: 'swing',
step: function (now) {
$(this).text(Math.ceil(now));
}
});
});
See if this is what you want: https://jsfiddle.net/aj7Lk2bw/19/
$(window).scroll(testScroll);
var viewed = false;
function isScrolledIntoView(elem) {
var docViewTop = $(window).scrollTop();
var docViewBottom = docViewTop + $(window).height();
var elemTop = $(elem).offset().top;
var elemBottom = elemTop + $(elem).height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}
function testScroll() {
if (isScrolledIntoView($(".numbers")) && !viewed) {
viewed = true;
$('.value').each(function () {
$(this).prop('Counter',0).animate({
Counter: $(this).text()
}, {
duration: 4000,
easing: 'swing',
step: function (now) {
$(this).text(Math.ceil(now));
}
});
});
}
}
Found the way to do it here: Run script when div is visible in browser window
This is a possible solution:
var section = document.querySelector('.numbers');
var hasEntered = false;
window.addEventListener('scroll', (e) => {
var shouldAnimate = (window.scrollY + window.innerHeight) >= section.offsetTop;
if (shouldAnimate && !hasEntered) {
hasEntered = true;
$('.value').each(function () {
$(this).prop('Counter',0).animate({
Counter: $(this).text()
}, {
duration: 4000,
easing: 'swing',
step: function (now) {
$(this).text(Math.ceil(now));
}
});
});
}
});
the variable section is your blue section with the numbers, hasEntered is to not repeat the animation.
If the window scroll is higher than the section position, than it will animate!
Fiddle: https://jsfiddle.net/aj7Lk2bw/18/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With