policybot/fassets/js/plugins.counter.js

60 lines
2.3 KiB
JavaScript
Raw Normal View History

2021-11-30 10:56:55 +00:00
/* https://github.com/mhuggins/jquery-countTo
CountTo */
(function(e){function t(e,t){return e.toFixed(t.decimals)}e.fn.countTo=function(t){t=t||{};return e(this).each(function(){function l(){a+=i;u++;c(a);if(typeof n.onUpdate=="function"){n.onUpdate.call(s,a)}if(u>=r){o.removeData("countTo");clearInterval(f.interval);a=n.to;if(typeof n.onComplete=="function"){n.onComplete.call(s,a)}}}function c(e){var t=n.formatter.call(s,e,n);o.text(t)}var n=e.extend({},e.fn.countTo.defaults,{from:e(this).data("from"),to:e(this).data("to"),speed:e(this).data("speed"),refreshInterval:e(this).data("refresh-interval"),decimals:e(this).data("decimals")},t);var r=Math.ceil(n.speed/n.refreshInterval),i=(n.to-n.from)/r;var s=this,o=e(this),u=0,a=n.from,f=o.data("countTo")||{};o.data("countTo",f);if(f.interval){clearInterval(f.interval)}f.interval=setInterval(l,n.refreshInterval);c(a)})};e.fn.countTo.defaults={from:0,to:0,speed:1e3,refreshInterval:100,decimals:0,formatter:t,onUpdate:null,onComplete:null}})(jQuery);
window.SEMICOLON_counterInit = function( $counterEl ){
$counterEl = $counterEl.filter(':not(.customjs)');
if( $counterEl.length < 1 ){
return true;
}
$counterEl.each(function(){
let element = $(this),
elComma = element.find('span').attr('data-comma'),
elSep = element.find('span').attr('data-sep') || ',',
elPlaces = element.find('span').attr('data-places') || 3;
let elCommaObj = {
comma : elComma,
sep : elSep,
places : Number( elPlaces )
}
if( element.hasClass('counter-instant') ) {
SEMICOLON_runCounterInit( element, elCommaObj );
return;
}
let observer = new IntersectionObserver( function(entries, observer) {
entries.forEach( function(entry) {
if (entry.isIntersecting) {
SEMICOLON_runCounterInit( element, elCommaObj );
observer.unobserve( entry.target );
}
});
}, {rootMargin: '-50px'});
observer.observe( element[0] );
});
};
window.SEMICOLON_runCounterInit = function( elCounter, elFormat ){
if( elFormat.comma == 'true' ) {
let reFormat = '\\B(?=(\\d{'+ elFormat.places +'})+(?!\\d))',
regExp = new RegExp( reFormat, "g" );
elCounter.find('span').countTo({
formatter: function (value, options) {
value = value.toFixed( options.decimals );
value = value.replace( regExp, elFormat.sep );
return value;
}
});
} else {
elCounter.find('span').countTo();
}
};