"use strict";
(function ($) {
$(window).on('elementor/frontend/init', function () {
let ProgressBarHandler = elementorModules.frontend.handlers.Base.extend({
onInit: function onInit() {
this.initProgressBar();
},
initProgressBar: function initProgressBar() {
let $scope = this.$element;
// noinspection JSUnresolvedReference
let $progressBar = $scope.find('.king-addons-progress-bar'),
prBarCircle = $scope.find('.king-addons-prbar-circle'),
$prBarCirclePrline = $scope.find('.king-addons-prbar-circle-prline'),
prBarHrLine = $progressBar.find('.king-addons-prbar-hr-line-inner'),
prBarVrLine = $progressBar.find('.king-addons-prbar-vr-line-inner'),
prBarOptions = $progressBar.data('options'),
prBarCircleOptions = prBarCircle.data('circle-options'),
prBarCounter = $progressBar.find('.king-addons-prbar-counter-value'),
prBarCounterValue = prBarOptions.counterValue,
prBarCounterValuePercent = prBarOptions.counterValuePercent,
prBarAnimDuration = prBarOptions.animDuration,
prBarAnimDelay = prBarOptions.animDelay,
prBarLoopDelay = +prBarOptions.loopDelay,
numeratorData = {
toValue: prBarCounterValue,
duration: prBarAnimDuration,
};
// noinspection JSUnresolvedReference
if ('yes' === prBarOptions.counterSeparator) {
numeratorData.delimiter = ',';
}
function isInViewport($selector) {
if ($selector.length) {
let elementTop = $selector.offset().top,
elementBottom = elementTop + $selector.outerHeight(),
viewportTop = $(window).scrollTop(),
viewportBottom = viewportTop + $(window).height();
if (elementTop > $(window).height()) {
elementTop += 50;
}
return elementBottom > viewportTop && elementTop < viewportBottom;
}
}
function progressBar() {
if (isInViewport(prBarVrLine)) {
prBarVrLine.css({
'height': prBarCounterValuePercent + '%'
});
}
if (isInViewport(prBarHrLine)) {
prBarHrLine.css({
'width': prBarCounterValuePercent + '%'
});
}
if (isInViewport(prBarCircle)) {
// noinspection JSUnresolvedReference
let circleDashOffset = prBarCircleOptions.circleOffset;
$prBarCirclePrline.css({
'stroke-dashoffset': circleDashOffset
});
}
if (isInViewport(prBarVrLine) || isInViewport(prBarHrLine) || isInViewport(prBarCircle)) {
setTimeout(function () {
prBarCounter.numerator(numeratorData);
}, prBarAnimDelay);
}
}
progressBar();
if (prBarOptions.loop === 'yes') {
setInterval(function () {
if (isInViewport(prBarVrLine)) {
prBarVrLine.css({
'height': 0 + '%'
});
}
if (isInViewport(prBarHrLine)) {
prBarHrLine.css({
'width': 0 + '%'
});
}
if (isInViewport(prBarCircle)) {
$prBarCirclePrline.css({
'stroke-dashoffset': $prBarCirclePrline.css('stroke-dasharray')
});
}
if (isInViewport(prBarVrLine) || isInViewport(prBarHrLine) || isInViewport(prBarCircle)) {
setTimeout(function () {
prBarCounter.numerator({
toValue: 0,
duration: prBarAnimDuration,
});
}, prBarAnimDelay);
}
setTimeout(function () {
progressBar();
}, prBarAnimDuration + prBarAnimDelay);
}, (prBarAnimDuration + prBarAnimDelay) * prBarLoopDelay);
}
$(window).on('scroll', function () {
progressBar();
});
}
});
// Initialize the handler when the specific widget is ready in Elementor
elementorFrontend.hooks.addAction('frontend/element_ready/king-addons-progress-bar.default', function ($scope) {
elementorFrontend.elementsHandler.addHandler(ProgressBarHandler, {
$element: $scope
});
});
});
})(jQuery);