// import $ from 'jquery'; const $ = require('jquery'); import Slider from './slider'; import 'jquery.easing'; class QuickFacts { constructor(section) { this.section = section.addClass('initiated'); this.initSlides(); this.slider = new Slider(section.find('.slider')); this.stringLength = 0; this.slider.section.on('in-viewport slide-change', () => { const curr = this.slider.currentSlide; if (this.slides[curr].hasCounter) { this.startCounter(curr); } }) } initSlides() { this.slides = []; this.section.find('.slider').children().each((i, element) => { const span = $(element).find('.counter'); const c = {}; c.hasCounter = span.length === 1; if (c.hasCounter) { c.element = span; c.from = parseFloat(span.attr('data-from')); c.to = parseFloat(span.attr('data-to')); c.duration = parseFloat(span.attr('data-duration')) * 1000; c.decimals = parseFloat(span.attr('data-decimals')); c.animation = $({num: c.from}); } this.slides.push(c); }) } startCounter(index) { const t = this; const c = this.slides[index]; c.stringLength = 0; c.animation.stop(); c.animation = $({num: c.from}); t.setText(c, t.formatNumber(c.from, c.decimals)); c.animation.animate({num: c.to}, { duration: c.duration, easing: 'easeOutCubic', step(num) { t.setText(c, t.formatNumber(num, c.decimals)); }, complete() { t.setText(c, t.formatNumber(c.to, c.decimals)); } }) } setText(counter, str) { if (str.length !== counter.stringLength) { counter.element.css('width', 'auto'); counter.element.text(str); counter.element.css('width', Math.round(counter.element.outerWidth()) + 'px'); counter.stringLength = str.length; } else { counter.element.text(str); } } formatNumber(num, decimals) { return new Intl.NumberFormat('de-DE',{ minimumFractionDigits: decimals, maximumFractionDigits: decimals, }).format(num); } } $('body').on('ihk-init dynamic-component-loaded gfi-dynamic-init', function () { $('.quick-facts:not(.initiated)').each(function() { new QuickFacts($(this)); }); });