/** * Template Name: HeroBiz - v2.4.0 * Template URL: https://bootstrapmade.com/herobiz-bootstrap-business-template/ * Author: BootstrapMade.com * License: https://bootstrapmade.com/license/ */ document.addEventListener('DOMContentLoaded', () => { "use strict"; /** * Preloader */ const preloader = document.querySelector('#preloader'); if (preloader) { window.addEventListener('load', () => { preloader.remove(); }); } /** * Sticky header on scroll */ const selectHeader = document.querySelector('#header'); if (selectHeader) { document.addEventListener('scroll', () => { window.scrollY > 100 ? selectHeader.classList.add('sticked') : selectHeader.classList.remove('sticked'); }); } /** * Navbar links active state on scroll */ let navbarlinks = document.querySelectorAll('#navbar .scrollto'); function navbarlinksActive() { navbarlinks.forEach(navbarlink => { if (!navbarlink.hash) return; let section = document.querySelector(navbarlink.hash); if (!section) return; let position = window.scrollY; if (navbarlink.hash != '#header') position += 200; if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) { navbarlink.classList.add('active'); } else { navbarlink.classList.remove('active'); } }) } window.addEventListener('load', navbarlinksActive); document.addEventListener('scroll', navbarlinksActive); /** * Function to scroll to an element with top ofset */ function scrollto(el) { const selectHeader = document.querySelector('#header'); let offset = 0; if (selectHeader.classList.contains('sticked')) { offset = document.querySelector('#header.sticked').offsetHeight; } else if (selectHeader.hasAttribute('data-scrollto-offset')) { offset = selectHeader.offsetHeight - parseInt(selectHeader.getAttribute('data-scrollto-offset')); } window.scrollTo({ top: document.querySelector(el).offsetTop - offset, behavior: 'smooth' }); } /** * Fires the scrollto function on click to links .scrollto */ let selectScrollto = document.querySelectorAll('.scrollto'); selectScrollto.forEach(el => el.addEventListener('click', function(event) { if (document.querySelector(this.hash)) { event.preventDefault(); let mobileNavActive = document.querySelector('.mobile-nav-active'); if (mobileNavActive) { mobileNavActive.classList.remove('mobile-nav-active'); let navbarToggle = document.querySelector('.mobile-nav-toggle'); navbarToggle.classList.toggle('bi-list'); navbarToggle.classList.toggle('bi-x'); } scrollto(this.hash); } })); /** * Scroll with ofset on page load with hash links in the url */ window.addEventListener('load', () => { if (window.location.hash) { if (document.querySelector(window.location.hash)) { scrollto(window.location.hash); } } }); /** * Mobile nav toggle */ const mobileNavToogle = document.querySelector('.mobile-nav-toggle'); if (mobileNavToogle) { mobileNavToogle.addEventListener('click', function(event) { event.preventDefault(); document.querySelector('body').classList.toggle('mobile-nav-active'); this.classList.toggle('bi-list'); this.classList.toggle('bi-x'); }); } /** * Toggle mobile nav dropdowns */ const navDropdowns = document.querySelectorAll('.navbar .dropdown > a'); navDropdowns.forEach(el => { el.addEventListener('click', function(event) { if (document.querySelector('.mobile-nav-active')) { event.preventDefault(); this.classList.toggle('active'); this.nextElementSibling.classList.toggle('dropdown-active'); let dropDownIndicator = this.querySelector('.dropdown-indicator'); dropDownIndicator.classList.toggle('bi-chevron-up'); dropDownIndicator.classList.toggle('bi-chevron-down'); } }) }); /** * Auto generate the hero carousel indicators */ let heroCarouselIndicators = document.querySelector('#hero .carousel-indicators'); if (heroCarouselIndicators) { let heroCarouselItems = document.querySelectorAll('#hero .carousel-item') heroCarouselItems.forEach((item, index) => { if (index === 0) { heroCarouselIndicators.innerHTML += `
  • `; } else { heroCarouselIndicators.innerHTML += `
  • `; } }); } /** * Scroll top button */ const scrollTop = document.querySelector('.scroll-top'); if (scrollTop) { const togglescrollTop = function() { window.scrollY > 100 ? scrollTop.classList.add('active') : scrollTop.classList.remove('active'); } window.addEventListener('load', togglescrollTop); document.addEventListener('scroll', togglescrollTop); scrollTop.addEventListener('click', window.scrollTo({ top: 0, behavior: 'smooth' })); } /** * Initiate glightbox */ const glightbox = GLightbox({ selector: '.glightbox' }); /** * Porfolio isotope and filter */ let portfolionIsotope = document.querySelector('.portfolio-isotope'); if (portfolionIsotope) { let portfolioFilter = portfolionIsotope.getAttribute('data-portfolio-filter') ? portfolionIsotope.getAttribute('data-portfolio-filter') : '*'; let portfolioLayout = portfolionIsotope.getAttribute('data-portfolio-layout') ? portfolionIsotope.getAttribute('data-portfolio-layout') : 'masonry'; let portfolioSort = portfolionIsotope.getAttribute('data-portfolio-sort') ? portfolionIsotope.getAttribute('data-portfolio-sort') : 'original-order'; window.addEventListener('load', () => { let portfolioIsotope = new Isotope(document.querySelector('.portfolio-container'), { itemSelector: '.portfolio-item', layoutMode: portfolioLayout, filter: portfolioFilter, sortBy: portfolioSort }); let menuFilters = document.querySelectorAll('.portfolio-isotope .portfolio-flters li'); menuFilters.forEach(function(el) { el.addEventListener('click', function() { document.querySelector('.portfolio-isotope .portfolio-flters .filter-active').classList.remove('filter-active'); this.classList.add('filter-active'); portfolioIsotope.arrange({ filter: this.getAttribute('data-filter') }); if (typeof aos_init === 'function') { aos_init(); } }, false); }); }); } /** * Clients Slider */ new Swiper('.clients-slider', { speed: 400, loop: true, autoplay: { delay: 5000, disableOnInteraction: false }, slidesPerView: 'auto', breakpoints: { 320: { slidesPerView: 2, spaceBetween: 40 }, 480: { slidesPerView: 3, spaceBetween: 60 }, 640: { slidesPerView: 4, spaceBetween: 80 }, 992: { slidesPerView: 6, spaceBetween: 120 } } }); /** * Testimonials Slider */ new Swiper('.testimonials-slider', { speed: 600, loop: true, autoplay: { delay: 5000, disableOnInteraction: false }, slidesPerView: 'auto', pagination: { el: '.swiper-pagination', type: 'bullets', clickable: true } }); /** * Testimonials Slider */ new Swiper('.portfolio-details-slider', { speed: 600, loop: true, autoplay: { delay: 5000, disableOnInteraction: false }, slidesPerView: 'auto', pagination: { el: '.swiper-pagination', type: 'bullets', clickable: true } }); /** * Animation on scroll function and init */ function aos_init() { AOS.init({ duration: 1000, easing: 'ease-in-out', once: true, mirror: false }); } window.addEventListener('load', () => { aos_init(); }); });