123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
-
- (function() {
- "use strict";
-
- /**
- * Easy selector helper function
- */
- const select = (el, all = false) => {
- el = el.trim()
- if (all) {
- return [...document.querySelectorAll(el)]
- } else {
- return document.querySelector(el)
- }
- }
-
- /**
- * Easy event listener function
- */
- const on = (type, el, listener, all = false) => {
- let selectEl = select(el, all)
- if (selectEl) {
- if (all) {
- selectEl.forEach(e => e.addEventListener(type, listener))
- } else {
- selectEl.addEventListener(type, listener)
- }
- }
- }
-
- /**
- * Easy on scroll event listener
- */
- const onscroll = (el, listener) => {
- el.addEventListener('scroll', listener)
- }
-
- /**
- * Navbar links active state on scroll
- */
- let navbarlinks = select('#navbar .scrollto', true)
- const navbarlinksActive = () => {
- let position = window.scrollY + 200
- navbarlinks.forEach(navbarlink => {
- if (!navbarlink.hash) return
- let section = select(navbarlink.hash)
- if (!section) return
- if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) {
- navbarlink.classList.add('active')
- } else {
- navbarlink.classList.remove('active')
- }
- })
- }
- window.addEventListener('load', navbarlinksActive)
- onscroll(document, navbarlinksActive)
-
- /**
- * Scrolls to an element with header offset
- */
- const scrollto = (el) => {
- let header = select('#header')
- let offset = header.offsetHeight
-
- if (!header.classList.contains('header-scrolled')) {
- offset -= 20
- }
-
- let elementPos = select(el).offsetTop
- window.scrollTo({
- top: elementPos - offset,
- behavior: 'smooth'
- })
- }
-
- /**
- * Toggle .header-scrolled class to #header when page is scrolled
- */
- let selectHeader = select('#header')
- if (selectHeader) {
- const headerScrolled = () => {
- if (window.scrollY > 100) {
- selectHeader.classList.add('header-scrolled')
- } else {
- selectHeader.classList.remove('header-scrolled')
- }
- }
- window.addEventListener('load', headerScrolled)
- onscroll(document, headerScrolled)
- }
-
- /**
- * Back to top button
- */
- let backtotop = select('.back-to-top')
- if (backtotop) {
- const toggleBacktotop = () => {
- if (window.scrollY > 100) {
- backtotop.classList.add('active')
- } else {
- backtotop.classList.remove('active')
- }
- }
- window.addEventListener('load', toggleBacktotop)
- onscroll(document, toggleBacktotop)
- }
-
- /**
- * Mobile nav toggle
- */
- on('click', '.mobile-nav-toggle', function(e) {
- select('#navbar').classList.toggle('navbar-mobile')
- this.classList.toggle('bi-list')
- this.classList.toggle('bi-x')
- })
-
- /**
- * Mobile nav dropdowns activate
- */
- on('click', '.navbar .dropdown > a', function(e) {
- if (select('#navbar').classList.contains('navbar-mobile')) {
- e.preventDefault()
- this.nextElementSibling.classList.toggle('dropdown-active')
- }
- }, true)
-
- /**
- * Scrool with ofset on links with a class name .scrollto
- */
- on('click', '.scrollto', function(e) {
- if (select(this.hash)) {
- e.preventDefault()
-
- let navbar = select('#navbar')
- if (navbar.classList.contains('navbar-mobile')) {
- navbar.classList.remove('navbar-mobile')
- let navbarToggle = select('.mobile-nav-toggle')
- navbarToggle.classList.toggle('bi-list')
- navbarToggle.classList.toggle('bi-x')
- }
- scrollto(this.hash)
- }
- }, true)
-
- /**
- * Scroll with ofset on page load with hash links in the url
- */
- window.addEventListener('load', () => {
- if (window.location.hash) {
- if (select(window.location.hash)) {
- scrollto(window.location.hash)
- }
- }
- });
-
- /**
- * 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
- },
- breakpoints: {
- 320: {
- slidesPerView: 1,
- spaceBetween: 20
- },
-
- 1200: {
- slidesPerView: 2,
- spaceBetween: 20
- }
- }
- });
-
- /**
- * Porfolio isotope and filter
- */
- window.addEventListener('load', () => {
- let portfolioContainer = select('.portfolio-container');
- if (portfolioContainer) {
- let portfolioIsotope = new Isotope(portfolioContainer, {
- itemSelector: '.portfolio-item',
- layoutMode: 'fitRows'
- });
-
- let portfolioFilters = select('#portfolio-flters li', true);
-
- on('click', '#portfolio-flters li', function(e) {
- e.preventDefault();
- portfolioFilters.forEach(function(el) {
- el.classList.remove('filter-active');
- });
- this.classList.add('filter-active');
-
- portfolioIsotope.arrange({
- filter: this.getAttribute('data-filter')
- });
- portfolioIsotope.on('arrangeComplete', function() {
- AOS.refresh()
- });
- }, true);
- }
-
- });
-
- /**
- * Initiate portfolio lightbox
- */
- const portfolioLightbox = GLightbox({
- selector: '.portfolio-lightbox'
- });
-
- /**
- * Portfolio details slider
- */
- new Swiper('.portfolio-details-slider', {
- speed: 400,
- loop: true,
- autoplay: {
- delay: 5000,
- disableOnInteraction: false
- },
- pagination: {
- el: '.swiper-pagination',
- type: 'bullets',
- clickable: true
- }
- });
-
- /**
- * Animation on scroll
- */
- window.addEventListener('load', () => {
- AOS.init({
- duration: 1000,
- easing: 'ease-in-out',
- once: true,
- mirror: false
- })
- });
-
- })()
|