/*
Template: Growix - Business Consulting HTML Template
Author: peacefulqode.co.in
Version: 1.0
Design and Developed by: Peacefulqode
NOTE: This is main javasctipt file of template.
*/
/*================================================
[ Table of contents ]
==================================================
==> Page Loader
==> Accordion
==> Sticky Header
==> Owl Carousel
==> Progressbar
==> Back To Top
==> Isotope
==> counter
==> wow
==> magnificpopup
==> click-active
==> card
==> Loadmore
==> slick slider
==> hover-active
==> Splitting
==================================================
[ End table content ]
================================================*/
(function (jQuery) {
"use strict"
jQuery(window).on('load', function (e) {
/*==================================================
[ page Loader ]
==================================================*/
var Scrollbar = window.Scrollbar;
jQuery("#pq-loading").fadeOut();
jQuery("#pq-loading").delay(0).fadeOut("slow");
/*==================================================
[ Accordion ]
==================================================*/
jQuery('.pq-accordion .pq-accordion-box .pq-accordion-details').hide();
jQuery('.pq-accordion .pq-accordion-box:first').addClass('pq-active').children().slideDown('slow');
jQuery('.pq-accordion .pq-accordion-box').on("click", function () {
if (jQuery(this).children('div.pq-accordion-details').is(':hidden')) {
jQuery('.pq-accordion .pq-accordion-box').removeClass('pq-active').children('div.pq-accordion-details').slideUp('slow');
jQuery(this).toggleClass('pq-active').children('div.pq-accordion-details').slideDown('slow');
}
});
/*==================================================
[ Sticky Header ]
==================================================*/
if (jQuery('header').hasClass('pq-header-default')) {
jQuery(window).scroll(function () {
var scrollTop = jQuery(window).scrollTop();
if (scrollTop > 300) {
jQuery('.pq-bottom-header').addClass('pq-header-sticky animated fadeInDown animate__faster');
} else {
jQuery('.pq-bottom-header').removeClass('pq-header-sticky animated fadeInDown animate__faster');
}
});
}
if (jQuery('header').hasClass('pq-has-sticky')) {
jQuery(window).scroll(function () {
var scrollTop = jQuery(window).scrollTop();
if (scrollTop > 300) {
jQuery('.pq-bottom-header').addClass('pq-header-sticky animated fadeInDown animate__faster');
} else {
jQuery('.pq-bottom-header').removeClass('pq-header-sticky animated fadeInDown animate__faster');
}
});
}
/*==================================================
[ owl carousel ]
==================================================*/
jQuery('.owl-carousel').each(function () {
var app_slider = jQuery(this);
var rtl = false;
var prev = 'ion-ios-arrow-back';
var next = 'ion-ios-arrow-forward';
var prev_text = 'Prev';
var next_text = 'Next';
if (jQuery('body').hasClass('pq-is-rtl')) {
rtl = true;
prev = 'ion-ios-arrow-forward';
next = 'ion-ios-arrow-back';
}
if (app_slider.data('prev_text') && app_slider.data('prev_text') != '') {
prev_text = app_slider.data('prev_text');
}
if (app_slider.data('next_text') && app_slider.data('next_text') != '') {
next_text = app_slider.data('next_text');
}
app_slider.owlCarousel({
rtl: rtl,
items: app_slider.data("desk_num"),
loop: app_slider.data("loop"),
margin: app_slider.data("margin"),
nav: app_slider.data("nav"),
dots: app_slider.data("dots"),
loop: app_slider.data("loop"),
autoplay: app_slider.data("autoplay"),
autoplayHoverPause: true,
autoplayTimeout: app_slider.data("autoplay-timeout"),
navText: ["", ""],
responsiveClass: true,
responsive: {
// breakpoint from 0 up
0: {
items: app_slider.data("mob_sm"),
nav: false,
dots: false
},
// breakpoint from 480 up
480: {
items: app_slider.data("mob_num"),
nav: false,
dots: false
},
// breakpoint from 786 up
786: {
items: app_slider.data("tab_num")
},
// breakpoint from 1023 up
1023: {
items: app_slider.data("lap_num")
},
1199: {
items: app_slider.data("desk_num")
}
}
});
});
/*==================================================
[ progress bar ]
==================================================*/
jQuery(document).ready(function () {
// Animate progress bars
jQuery(".pq-progressbar-content .show-progress").each(function () {
let $this = jQuery(this);
let targetWidth = $this.data("width") + "%";
$this.css("width", "0"); // Reset width
$this.animate({ width: targetWidth }, 2000); // Animate to target width
});
});
/*==================================================
[ click-active ]
==================================================*/
jQuery('.pq-click-active .pq-click-item:first-child').addClass("pq-active");
jQuery('.pq-click-item').on({
'click': function () {
jQuery('.pq-click-item').removeClass('pq-active');
jQuery(this).addClass('pq-active');
},
});
/*==================================================
[ counter ]
==================================================*/
jQuery(window).on('scroll', function () {
jQuery('.pq-counter-info').each(function () {
var $this = jQuery(this);
var elementTop = $this.offset().top;
var windowBottom = jQuery(window).scrollTop() + jQuery(window).height();
// Check if the counter element is in the viewport
if (windowBottom > elementTop) {
if (!$this.hasClass('counted')) {
$this.addClass('counted');
// Animate the counter
$this.find('.pq-count').each(function () {
var $count = jQuery(this),
countTo = $count.attr('data-count');
var Toduration = parseInt($count.attr('data-pq-duration'), 10); // ✅ radix added
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
jQuery({ countNum: 0 }).animate(
{ countNum: countTo },
{
duration: Toduration,
easing: 'swing',
step: function () {
$count.text(numberWithCommas(Math.floor(this.countNum)));
},
complete: function () {
$count.text(numberWithCommas(this.countNum));
}
}
);
});
}
}
});
});
/*==================================================
[ hover-active ]
==================================================*/
jQuery('.pq-hover-active').each(function () {
var $container = jQuery(this);
// Activate the second child initially
$container.find('.pq-hover-item:nth-child(2)').addClass("pq-active");
// Handle hover events for items within this container
$container.find('.pq-hover-item').on({
mouseenter: function () {
$container.find('.pq-hover-item').removeClass('pq-active');
jQuery(this).addClass('pq-active');
},
});
});
/*==================================================
[ back to top ]
==================================================*/
jQuery('#back-to-top').fadeOut();
jQuery(window).on("scroll", function () {
if (jQuery(this).scrollTop() > 250) {
jQuery('#back-to-top').fadeIn(1400);
} else {
jQuery('#back-to-top').fadeOut(400);
}
});
jQuery('#top').on('click', function () {
jQuery('top').tooltip('hide');
jQuery('body,html').animate({
scrollTop: 0
}, 100);
return false;
});
/*==================================================
[ Isotope ]
==================================================*/
jQuery(".pq-masonry").isotope({
itemSelector: ".pq-masonry-item",
masonry: {
columnWidth: ".grid-sizer",
// gutter: 0
},
});
jQuery(".pq-grid").isotope({
itemSelector: ".pq-grid-item",
});
jQuery(".pq-filter-button-group").on(
"click",
".pq-filter-btn",
function () {
var filterValue = jQuery(this).attr("data-filter");
// console.log(filterValue);
jQuery(".pq-masonry").isotope({
filter: filterValue,
});
jQuery(".pq-grid").isotope({
filter: filterValue,
});
jQuery(".pq-filter-button-group .pq-filter-btn").removeClass("active");
jQuery(this).addClass("active");
updateFilterCounts();
}
);
var initial_items = 5;
var next_items = 3;
if (jQuery(".pq-masonry").length > 0) {
var initial_items = jQuery(".pq-masonry").data("initial_items");
var next_items = jQuery(".pq-masonry").data("next_items");
}
if (jQuery(".pq-grid").length > 0) {
var initial_items = jQuery(".pq-grid").data("initial_items");
var next_items = jQuery(".pq-grid").data("next_items");
}
function showNextItems(pagination) {
var itemsMax = jQuery(".visible_item").length;
var itemsCount = 0;
jQuery(".visible_item").each(function () {
if (itemsCount < pagination) {
jQuery(this).removeClass("visible_item");
itemsCount++;
}
});
if (itemsCount >= itemsMax) {
jQuery("#ShowMore").hide();
}
if (jQuery(".pq-masonry").length > 0) {
jQuery(".pq-masonry").isotope("layout");
}
if (jQuery(".pq-grid").length > 0) {
jQuery(".pq-grid").isotope("layout");
}
}
// function that hides items when page is loaded
function hideItems(pagination) {
var itemsMax = jQuery(".pq-filter-items").length;
// console.log(itemsMax);
var itemsCount = 0;
jQuery(".pq-filter-items").each(function () {
if (itemsCount >= pagination) {
jQuery(this).addClass("visible_item");
}
itemsCount++;
});
if (itemsCount < itemsMax || initial_items >= itemsMax) {
jQuery("#ShowMore").hide();
}
if (jQuery(".pq-masonry").length > 0) {
jQuery(".pq-masonry").isotope("layout");
}
if (jQuery(".pq-grid").length > 0) {
jQuery(".pq-grid").isotope("layout");
}
}
jQuery("#ShowMore").on("click", function (e) {
e.preventDefault();
showNextItems(next_items);
});
hideItems(initial_items);
function updateFilterCounts() {
// get filtered item elements
if (jQuery(".pq-masonry").length > 0) {
var itemElems = jQuery(".pq-masonry").isotope(
"getFilteredItemElements"
);
}
if (jQuery(".pq-grid").length > 0) {
var itemElems = jQuery(".pq-grid").isotope("getFilteredItemElements");
}
var count_items = jQuery(itemElems).length;
// console.log(count_items);
if (count_items > initial_items) {
jQuery("#ShowMore").show();
} else {
jQuery("#ShowMore").hide();
}
if (jQuery(".pq-filter-items").hasClass("visible_item")) {
jQuery(".pq-filter-items").removeClass("visible_item");
}
var index = 0;
jQuery(itemElems).each(function () {
if (index >= initial_items) {
jQuery(this).addClass("visible_item");
}
index++;
});
if (jQuery(".pq-masonry").length > 0) {
jQuery(".pq-masonry").isotope("layout");
}
if (jQuery(".pq-grid").length > 0) {
jQuery(".pq-grid").isotope("layout");
}
}
/*==================================================
[ wow ]
==================================================*/
// Animations au scroll désactivées
// new WOW().init();
/*==================================================
[ magnificpopup ]
==================================================*/
jQuery(".popup-youtube, .popup-vimeo, .popup-gmaps").magnificPopup({
disableOn: 700,
type: "iframe",
mainClass: "mfp-fade",
arrows: true,
removalDelay: 160,
preloader: false,
fixedContentPos: false,
});
// Initialize image galleries with event delegation
jQuery(".gallery").each(function () {
jQuery(this).magnificPopup({
delegate: "a",
type: "image",
gallery: {
enabled: true,
},
});
});
/*==================================================
[ card ]
===================================================*/
jQuery(".pq-cards").each(function () {
const {
ScrollObserver,
valueAtPercentage
} = aat
const cardsContainer = document.querySelector('.pq-cards')
const cards = document.querySelectorAll('.pq-card')
cardsContainer.style.setProperty('--cards-count', cards.length - 3)
cardsContainer.style.setProperty(
'--card-height',
`${cards[0].clientHeight}px`
)
Array.from(cards).forEach((card, index) => {
const offsetTop = 20 + index * 20
card.style.paddingTop = `${offsetTop}px`
if (index === cards.length - 1) {
return
}
const toScale = 1 - (cards.length - 1 - index) * 0.05
const nextCard = cards[index + 1]
const cardInner = card.querySelector('.pq-card-inner')
ScrollObserver.Element(nextCard, {
offsetTop,
offsetBottom: window.innerHeight - card.clientHeight
}).onScroll(({
percentageY
}) => {
cardInner.style.scale = valueAtPercentage({
from: 1,
to: toScale,
percentage: percentageY
})
cardInner.style.filter = `brightness(${valueAtPercentage({
from: 1,
to: 0.6,
percentage: percentageY
})})`
})
})
});
/*==================================================
[ Loadmore ]
==================================================*/
var initialItemsToShow = jQuery('.pq-portfolio-zigzag').data('initial-items'); // Number of items to show initially
var itemsToShowOnClick = jQuery('.pq-portfolio-zigzag').data('next-items');; // Number of items to show on each click
var $items = jQuery('.pq-portfolio-zigzag .pq-portfolio-block-1');
var itemsTotal = $items.length;
// Initially show only the first 5 items
$items.hide().slice(0, initialItemsToShow).show();
jQuery('#showMore').on('click', function (e) {
e.preventDefault();
var visibleItems = $items.filter(':visible').length;
// Show the next set of 3 items
$items.slice(visibleItems, visibleItems + itemsToShowOnClick).fadeIn();
// Hide the "Load More" button if all items are shown
if (visibleItems + itemsToShowOnClick >= itemsTotal) {
jQuery('#showMore').hide();
}
});
/*==================================================
[ slick slider ]
==================================================*/
if (jQuery('.slick-slider-main').length) {
var $slider = jQuery('.slick-slider-main').slick({
slidesToShow: 1,
infinite: true,
arrows: false,
autoplay: false,
dots: false,
lazyLoad: 'ondemand',
autoplaySpeed: 3000,
loop: true,
asNavFor: '.slick-slider-thumb'
});
var $slider2 = jQuery('.slick-slider-thumb').slick({
slidesToShow: 4,
infinite: false,
lazyLoad: 'ondemand',
asNavFor: '.slick-slider-main',
autoplay: false,
dots: false,
Default: '50px',
arrows: false,
centerMode: false,
loop: false,
focusOnSelect: true,
transformsEnabled: false
});
};
//slick Image Adjust
setTimeout(function () {
jQuery('.pq-img-main').each(function () {
var $parent = $(this);
var $thumbsColumn = $parent.find('.pq-slick-slider-thumb-inner');
var $adjustSizeElements = $parent.find('.pq-adjust-size');
if ($thumbsColumn.length && $adjustSizeElements.length) {
var thumbsColumnHeight = $thumbsColumn.outerHeight();
$adjustSizeElements.css('height', thumbsColumnHeight + 'px');
}
});
}, 500);
});
//slick Image Adjust
jQuery(document).ready(function () {
setTimeout(function () {
var parents = jQuery('.pq-img-main');
parents.each(function () {
var parent = jQuery(this);
var thumbsColumn = parent.find('.pq-slick-slider-thumb-inner');
var adjustSizeElements = parent.find('.pq-adjust-size');
if (thumbsColumn.length > 0 && adjustSizeElements.length > 0) {
var thumbsColumnHeight = thumbsColumn.outerHeight();
adjustSizeElements.css('height', thumbsColumnHeight + 'px');
}
// console.log(thumbsColumnHeight);
});
}, 500);
/*==================================================
[ Splitting ]
==================================================*/
// Animations de texte désactivées
// Splitting();
// ScrollOut({
// targets: '[data-splitting]'
// });
});
})(jQuery);