(function ($) {
"use strict";
// ==========================================
// Start Document Ready function
// ==========================================
$(document).ready(function () {
// ============== Mobile Nav Menu Dropdown Js Start =======================
function toggleSubMenu() {
if ($(window).width() <= 991) {
$('.has-submenu').off('click').on('click', function () {
$(this).toggleClass('active').siblings('.has-submenu').removeClass('active').find('.nav-submenu').slideUp(300);
$(this).find('.nav-submenu').stop(true, true).slideToggle(300);
});
} else {
$('.has-submenu').off('click');
}
}
toggleSubMenu();
$(window).resize(toggleSubMenu);
// ============== Mobile Nav Menu Dropdown Js End =======================
// ===================== Scroll Back to Top Js Start ======================
var progressPath = document.querySelector('.progress-wrap path');
var pathLength = progressPath.getTotalLength();
progressPath.style.transition = progressPath.style.WebkitTransition = 'none';
progressPath.style.strokeDasharray = pathLength + ' ' + pathLength;
progressPath.style.strokeDashoffset = pathLength;
progressPath.getBoundingClientRect();
progressPath.style.transition = progressPath.style.WebkitTransition = 'stroke-dashoffset 10ms linear';
var updateProgress = function () {
var scroll = $(window).scrollTop();
var height = $(document).height() - $(window).height();
var progress = pathLength - (scroll * pathLength / height);
progressPath.style.strokeDashoffset = progress;
}
updateProgress();
$(window).scroll(updateProgress);
var offset = 50;
var duration = 550;
jQuery(window).on('scroll', function() {
if (jQuery(this).scrollTop() > offset) {
jQuery('.progress-wrap').addClass('active-progress');
} else {
jQuery('.progress-wrap').removeClass('active-progress');
}
});
jQuery('.progress-wrap').on('click', function(event) {
event.preventDefault();
jQuery('html, body').animate({scrollTop: 0}, duration);
return false;
})
// ===================== Scroll Back to Top Js End ======================
// ========================== add active class to navbar menu current page Js Start =====================
function dynamicActiveMenuClass(selector) {
let FileName = window.location.pathname.split("/").reverse()[0];
// If we are at the root path ("/" or no file name), keep the activePage class on the Home item
if (FileName === "" || FileName === "index.html") {
// Keep the activePage class on the Home link
selector.find("li.nav-menu__item.has-submenu").eq(0).addClass("activePage");
} else {
// Remove activePage class from all items first
selector.find("li").removeClass("activePage");
// Add activePage class to the correct li based on the current URL
selector.find("li").each(function () {
let anchor = $(this).find("a");
if ($(anchor).attr("href") == FileName) {
$(this).addClass("activePage");
}
});
// If any li has activePage element, add class to its parent li
selector.children("li").each(function () {
if ($(this).find(".activePage").length) {
$(this).addClass("activePage");
}
});
}
}
if ($('ul').length) {
dynamicActiveMenuClass($('ul'));
}
// ========================== add active class to navbar menu current page Js End =====================
// ========================== Set Language in dropdown Js Start =================================
$('.lang-dropdown li').each(function () {
var thisItem = $(this);
thisItem.on('click', function () {
const listText = thisItem.text().trim(); // Get the text of the clicked item
const listImageSrc = thisItem.find('img').attr('src'); // Get the image source of the clicked item
// Set the selected text and image
const selectedTextContainer = thisItem.closest('.group-item').find('.selected-text');
selectedTextContainer.contents().last().replaceWith(listText); // Update the text (after the image)
selectedTextContainer.find('img').attr('src', listImageSrc); // Update the image
});
});
// ========================== Set Language in dropdown Js End =================================
// ========================== Add Attribute For Bg Image Js Start ====================
$(".bg-img").css('background', function () {
var bg = ('url(' + $(this).data("background-image") + ')');
return bg;
});
// ========================== Add Attribute For Bg Image Js End =====================
// ============================ Banner Slider Js Start ===========================
var bannerMenu = ['Air Freight', 'Ocean Freight', 'Land Transport']
var bannerSwiper = new Swiper ('.banner-slider', {
loop: true,
speed: 800,
slidesPerView: 1,
grabCursor: true,
loop: true,
effect: 'fade',
autoplay: {
delay: 4500,
disableOnInteraction: false,
},
pagination: {
el: '.banner-pagination',
clickable: true,
renderBullet: function (index, className) {
return '' + (bannerMenu[index]) + '';
},
},
// Navigation arrows
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
// Stop
$('.banner-slider').on('mouseenter', function() {
bannerSwiper.autoplay.stop();
});
// Start
$('.banner-slider').on('mouseleave', function() {
bannerSwiper.autoplay.start();
});
// ============================ Banner Slider Js End ===========================
// ============================ Banner Slider Js Start ===========================
var bannerTwoMenu = ['Air Freight', 'Ocean Freight', 'Land Transport']
var bannerTwoSwiper = new Swiper ('.banner-two-slider', {
loop: true,
speed: 800,
slidesPerView: 1,
grabCursor: true,
effect: 'fade',
loop: true,
autoplay: {
delay: 3500,
disableOnInteraction: false,
},
pagination: {
el: '.banner-two-pagination',
clickable: true,
renderBullet: function (index, className) {
return '' + (bannerMenu[index]) + '';
},
},
// Navigation arrows
navigation: {
nextEl: '.banner-two-swiper-button-next',
prevEl: '.banner-two-swiper-button-prev',
},
});
// Stop
$('.banner-two-slider').on('mouseenter', function() {
bannerTwoSwiper.autoplay.stop();
});
// Start
$('.banner-two-slider').on('mouseleave', function() {
bannerTwoSwiper.autoplay.start();
});
// ============================ Banner Slider Js End ===========================
// ============================ AOS Js Start ===========================
AOS.init();
// ============================ AOS Js End ===========================
// ============================ Features Item Js Start ===========================
$('.features-item').on('mouseenter', function () {
$('.features-item').removeClass('bg-white common-shadow-two');
$(this).addClass('bg-white common-shadow-two');
});
// ============================ Features Item Js End ===========================
// ============================ Animated Radial Progress Bar Js Start ===========================
$('svg.radial-progress').each(function( index, value ) {
$(this).find($('circle.complete')).removeAttr( 'style' );
});
// ============================ Animated Radial Progress Bar Js End ===========================
// ========================= Counter Up Js Start ===================
const counterUp = window.counterUp.default;
const callback = (entries) => {
entries.forEach((entry) => {
const el = entry.target;
if (entry.isIntersecting && !el.classList.contains('is-visible')) {
counterUp(el, {
duration: 2000,
delay: 16,
});
el.classList.add('is-visible');
}
});
};
const IO = new IntersectionObserver(callback, { threshold: 1 });
// Counter
const counter = document.querySelector('.counter');
if (counter) {
IO.observe(counter);
}
// ========================= Counter Up Js End ===================
// ========================= Add Class To transport way item Js Start ===================
$('.how-it-work-item').on('mouseenter', function () {
$('.how-it-work-item').find('.how-it-work-item__icon').removeClass('bg-main-two-600');
$(this).find('.how-it-work-item__icon').addClass('bg-main-two-600');
});
// ========================= Add Class To transport way item Js End ===================
// ========================= magnific Popup Js Start =====================
$('.play-button').magnificPopup({
type:'iframe',
removalDelay: 300,
mainClass: 'mfp-fade',
});
// ========================= magnific Popup Js End =====================
// ================================= Project slider Start =========================
var projectSlider = new Swiper(".project-slider", {
slidesPerView: 4,
loop: true,
spaceBetween: 30,
grabCursor: true,
speed: 1500,
loop: true,
autoplay: {
delay: 2500,
disableOnInteraction: false,
},
pagination: {
el: ".project-pagination",
clickable: true,
},
breakpoints: {
300: {
slidesPerView: 1,
},
575: {
slidesPerView: 2,
},
992: {
slidesPerView: 3,
},
1400: {
slidesPerView: 4,
},
},
});
// ================================= Project slider Start =========================
// ========================= Add Class To location item Js Start ===================
$('.location-item').on('mouseenter', function () {
$('.location-item').find('.location-item__card').addClass('invisible opacity-0');
$(this).find('.location-item__card').removeClass('invisible opacity-0');
});
// ========================= Add Class To location item Js End ===================
// ================================= Testimoanials slider Start =========================
var testiSwiper = new Swiper(".testimonials-slider", {
grabCursor: true,
effect: "creative",
speed: 1500,
autoplay: {
delay: 1000,
disableOnInteraction: false,
},
loop: true,
creativeEffect: {
prev: {
shadow: true,
translate: ["-20%", 0, -1],
},
next: {
translate: ["100%", 0, 0],
},
},
});
// Stop
$('.testimonials-slider').on('mouseenter', function() {
testiSwiper.autoplay.stop();
});
// Start
$('.testimonials-slider').on('mouseleave', function() {
testiSwiper.autoplay.start();
});
// ================================= Testimoanials slider Start =========================
// ================================= brand slider Start =========================
var brandSliderOne = new Swiper('.brand-slider', {
autoplay: {
delay: 2000,
disableOnInteraction: false
},
speed: 1500,
grabCursor: true,
loop: true,
slidesPerView: 5,
breakpoints: {
300: {
slidesPerView: 2,
},
768: {
slidesPerView: 3,
},
992: {
slidesPerView: 4,
},
1200: {
slidesPerView: 5,
},
}
});
// ================================= brand slider End =========================
// ================================= brand slider Start =========================
var brandSlider = new Swiper('.brand-three-slider', {
autoplay: {
delay: 2000,
disableOnInteraction: false
},
speed: 1500,
grabCursor: true,
loop: true,
slidesPerView: 5,
breakpoints: {
300: {
slidesPerView: 2,
},
768: {
slidesPerView: 3,
},
992: {
slidesPerView: 4,
},
1200: {
slidesPerView: 5,
},
}
});
// ================================= brand slider End =========================
// ================================= Brand Two slider Start =========================
var brandTwoSlider = new Swiper('.brand-two-slider', {
autoplay: {
delay: 2000,
disableOnInteraction: false
},
autoplay: false,
speed: 1500,
grabCursor: true,
loop: true,
slidesPerView: 7,
breakpoints: {
300: {
slidesPerView: 2,
},
575: {
slidesPerView: 3,
},
768: {
slidesPerView: 4,
},
992: {
slidesPerView: 5,
},
1200: {
slidesPerView: 6,
},
1400: {
slidesPerView: 7,
},
}
});
// ================================= Brand Two slider End =========================
// ========================= Blog item hover Js Start ===================
$('.blog-item').on('mouseenter', function () {
$('.blog-item').find('.blog-date').addClass('bg-main-600').removeClass('bg-main-two-600');
$('.blog-item').find('.blog-tag').addClass('bg-main-two-600').removeClass('bg-main-600');
$(this).find('.blog-date').removeClass('bg-main-600').addClass('bg-main-two-600');
$(this).find('.blog-tag').removeClass('bg-main-two-600').addClass('bg-main-600');
});
// ========================= Blog item hover Js End ===================
// ========================= Transport Way Js Start ===================
$('.transport-way-item').on('mouseenter', function () {
$('.transport-way-item').find('.transport-way-item__icon').removeClass('bg-main-two-600');
$('.transport-way-item').find('.transport-way-item__content').removeClass('border-main-two-600').addClass('border-neutral-50 ');
$(this).find('.transport-way-item__icon').addClass('bg-main-two-600');
$(this).find('.transport-way-item__content').removeClass('border-neutral-50').addClass('border-main-two-600');
});
// ========================= Transport Way Js End ===================
// ================================= Project slider Start =========================
var teamSlider = new Swiper(".team-slider", {
slidesPerView: 5,
loop: true,
spaceBetween: 30,
grabCursor: true,
speed: 1500,
loop: true,
autoplay: {
delay: 2500,
disableOnInteraction: false,
},
autoplay: false,
pagination: {
el: ".team-pagination",
clickable: true,
},
breakpoints: {
300: {
slidesPerView: 1,
},
575: {
slidesPerView: 2,
},
992: {
slidesPerView: 3,
},
1200: {
slidesPerView: 4,
},
1400: {
slidesPerView: 5,
},
},
});
// ================================= Project slider Start =========================
// ================================= Project slider Start =========================
var testimonialsTwoSlider = new Swiper(".testimonials-two-slider", {
slidesPerView: 3,
loop: true,
spaceBetween: 30,
grabCursor: true,
speed: 1500,
loop: true,
centerMode: true,
autoplay: {
delay: 2500,
disableOnInteraction: false,
},
autoplay: false,
pagination: {
el: ".project-pagination",
clickable: true,
},
// Navigation arrows
navigation: {
nextEl: '.testimonials-two-button-next',
prevEl: '.testimonials-two-button-prev',
},
breakpoints: {
300: {
slidesPerView: 1,
},
575: {
slidesPerView: 2,
},
992: {
slidesPerView: 2,
},
1200: {
slidesPerView: 3,
},
},
});
// ================================= Project slider Start =========================
// ================================= Marquee slider Start =========================
if ($(".marquee").length) {
$('.marquee').marquee({
speed: 100,
gap: 0,
delayBeforeStart: 0,
direction: $('html').attr('dir') === 'rtl' ? 'right' : 'left',
duplicated: true,
pauseOnHover: true,
startVisible:true,
});
}
// ================================= Marquee slider End =========================
// ================================ Projects page js start =================================
$('.project-gallery-link').magnificPopup({
type: 'image',
gallery: {
enabled: true
},
});
// ================================ Projects page js End =================================
// ================================ Floating Progress js start =================================
const progressContainers = document.querySelectorAll('.progress-container');
function setPercentage(progressContainer) {
const percentage = progressContainer.getAttribute('data-percentage') + '%';
const progressEl = progressContainer.querySelector('.progress');
const percentageEl = progressContainer.querySelector('.percentage');
progressEl.style.width = percentage;
percentageEl.innerText = percentage;
percentageEl.style.insetInlineStart = percentage;
}
// Intersection Observer to trigger progress animation when section is in view
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if (entry.isIntersecting) {
// Element is in view, start the progress animation
const progressContainer = entry.target;
setPercentage(progressContainer);
progressContainer.querySelector('.progress').classList.remove('active');
progressContainer.querySelector('.percentage').classList.remove('active');
observer.unobserve(progressContainer); // Stop observing once animation is triggered
}
});
}, {
threshold: 0.5 // Adjust this value as needed (0.5 means half the section needs to be visible)
});
// Start observing all progress containers
progressContainers.forEach(progressContainer => {
observer.observe(progressContainer);
});
// ================================ Floating Progress js End =================================
// ================================ Testimonials three slider js start =================================
var testimonialsThreeThumbsSlider = new Swiper(".testimonials-three-thumbs-slider", {
slidesPerView: 1,
loop: true,
freeMode: true,
watchSlidesProgress: true,
grabCursor: true,
speed: 2500,
autoplay: {
delay: 2500,
disableOnInteraction: false,
},
autoplay: false,
});
var testimonialsThreeContentSlider = new Swiper(".testimonials-three-content-slider", {
slidesPerView: 1,
loop: true,
effect: "creative",
creativeEffect: {
prev: {
shadow: true,
translate: ["-20%", 0, -1],
},
next: {
translate: ["100%", 0, 0],
},
},
grabCursor: true,
speed: 2500,
autoplay: {
delay: 2500,
disableOnInteraction: false,
},
autoplay: false,
navigation: {
nextEl: ".testimonials-three-btn-next",
prevEl: ".testimonials-three-btn-prev",
},
thumbs: {
swiper: testimonialsThreeThumbsSlider,
},
});
// ================================ Testimonials three slider js End =================================
// ========================= Counter Three section Js Start ===================
$('.counter-three-item').on('mouseenter', function () {
$('.counter-three-item').removeClass('bg-main-600');
$('.counter-three-item').find('.hover-text').removeClass('text-white');
$(this).addClass('bg-main-600');
$(this).find('.hover-text').addClass('text-white');
});
// ========================= Counter Three section Js End ===================
// ========================= Service Three Js End ===================
var serviceThreeSlider = new Swiper(".service-three-slider", {
slidesPerView: 3,
loop: true,
spaceBetween: 30,
grabCursor: true,
speed: 1500,
loop: true,
centerMode: true,
autoplay: {
delay: 2500,
disableOnInteraction: false,
},
pagination: {
el: ".project-pagination",
clickable: true,
},
// Navigation arrows
navigation: {
nextEl: '.service-three-button-next',
prevEl: '.service-three-button-prev',
},
breakpoints: {
300: {
slidesPerView: 1,
},
575: {
slidesPerView: 2,
},
992: {
slidesPerView: 2,
},
1200: {
slidesPerView: 3,
},
},
});
// ========================= Service Three Js End ===================
// ========================= Blog Three Js End ===================
var blogThreeSlider = new Swiper(".blog-three-slider", {
slidesPerView: 3,
loop: true,
spaceBetween: 30,
grabCursor: true,
speed: 1500,
loop: true,
centerMode: true,
autoplay: {
delay: 2500,
disableOnInteraction: false,
},
pagination: {
el: ".project-pagination",
clickable: true,
},
// Navigation arrows
navigation: {
nextEl: '.blog-three-button-next',
prevEl: '.blog-three-button-prev',
},
breakpoints: {
300: {
slidesPerView: 1,
},
575: {
slidesPerView: 2,
},
992: {
slidesPerView: 2,
},
1200: {
slidesPerView: 3,
},
},
});
// ========================= Blog Three Js End ===================
});
// ==========================================
// End Document Ready function
// ==========================================
// ========================= Preloader Js Start =====================
$(window).on("load", function(){
$('.preloader').fadeOut();
})
// ========================= Preloader Js End=====================
// ========================= Header Sticky Js Start ==============
$(window).on('scroll', function() {
if ($(window).scrollTop() >= 460) {
$('.header').addClass('fixed-header');
}
else {
$('.header').removeClass('fixed-header');
}
});
// ========================= Header Sticky Js End===================
})(jQuery);