Jquery.counto.js: On Scroll Count Numbers Not Onload
Solution 1:
To check if the element is scrolled into view, I'll use function from this answer.
Now, we can check if the element #counters
is in view by using below function
functionisScrolledIntoView(el) {
var elemTop = el.getBoundingClientRect().top;
var elemBottom = el.getBoundingClientRect().bottom;
var isVisible = (elemTop >= 0) && (elemBottom <= window.innerHeight);
return isVisible;
}
This first gets the bounding points using getBoundingClientRect()
. This returns top
, left
, bottom
, right
, width
and height
of the element on which the method is called. These can be used to detect if element is inside view.
top
and bottom
are taken from this object and checked if element bottom is less than window height.
First of all, bind scroll
event on the window
. Inside the handler, check if element is in the view. When element comes in the view, then call the plugin on elements and unbind the scroll
event.
functionisScrolledIntoView(el) {
var elemTop = el.getBoundingClientRect().top;
var elemBottom = el.getBoundingClientRect().bottom;
var isVisible = (elemTop >= 0) && (elemBottom <= window.innerHeight);
return isVisible;
}
$(window).on('scroll', function() {
if (isScrolledIntoView(document.getElementById('counters'))) {
$('.ace-counter-number').countTo();
// Unbind scroll event
$(window).off('scroll');
}
});
.justaddheight {
height: 500px;
}
.text-center {
text-align: center;
}
<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jquery-countto/1.2.0/jquery.countTo.js"></script><sectionclass="justaddheight text-center about"><h1>SCROLL DOWN</h1><p>First, Scroll Now</p><p>Second, try Again but wait for few seconds before scroll to identify.</p></section><sectionclass="justaddheight service"></section><sectionclass="justaddheight portfolio"></section><sectionid="counters"><divclass="ace-overlay"></div><divclass="container"><divclass="row"><divclass="col-md-3 col-sm-6 col-xs-12"><divclass="ace-counter to-animate"><iclass="ace-counter-icon icon-briefcase to-animate-2"></i><spanclass="ace-counter-number js-counter"data-from="0"data-to="89"data-speed="5000"data-refresh-interval="100">89</span><spanclass="ace-counter-label">Finished projects</span></div></div><divclass="col-md-3 col-sm-6 col-xs-12"><divclass="ace-counter to-animate"><iclass="ace-counter-icon icon-code to-animate-2"></i><spanclass="ace-counter-number js-counter"data-from="0"data-to="2343409"data-speed="5000"data-refresh-interval="50">2343409</span><spanclass="ace-counter-label">Templates</span></div></div><divclass="col-md-3 col-sm-6 col-xs-12"><divclass="ace-counter to-animate"><iclass="ace-counter-icon icon-cup to-animate-2"></i><spanclass="ace-counter-number js-counter"data-from="0"data-to="1302"data-speed="5000"data-refresh-interval="50">1302</span><spanclass="ace-counter-label">Cup of coffees</span></div></div><divclass="col-md-3 col-sm-6 col-xs-12"><divclass="ace-counter to-animate"><iclass="ace-counter-icon icon-people to-animate-2"></i><spanclass="ace-counter-number js-counter"data-from="0"data-to="52"data-speed="5000"data-refresh-interval="50">52</span><spanclass="ace-counter-label">Happy clients</span></div></div></div></div></section>
Solution 2:
You can use appear.js plugin which provides event triggers for elements when they appear, disappear and reappear in the viewport.
<spanclass='count'>50</span>
And the JS
appear({
init: functioninit() {},
elements: functionelements() {
// Track all elements with the class "count"returndocument.getElementsByClassName('count');
},
appear: functionappear(el) {
$(el).countTo({
from: 0,
to: $(el).html(),
speed: 1300,
refreshInterval: 60
});
},
disappear: functiondisappear(el) {},
bounds: 200,
reappear: true
});
Post a Comment for "Jquery.counto.js: On Scroll Count Numbers Not Onload"