(function ($) { 'use strict'; /* |-------------------------------------------------------------------------- | Template Name: Arino | Author: Laralink | Version: 1.0.0 |-------------------------------------------------------------------------- |-------------------------------------------------------------------------- | TABLE OF CONTENTS: |-------------------------------------------------------------------------- | | 1. Preloader | 2. Mobile Menu | 3. Sticky Header | 4. Dynamic Background | 5. Slick Slider | 6. Isotop Initialize | 7. Review | 8. Modal Video | 9. Tabs | 10. Accordian | 11. Counter Animation | 12. Ripple | 13. Parallax | 14. Hobble Effect | 15. Social Button Hover | 16. Light Gallery | 17. Scroll Up | 18. Portfolio Section | 19. Ripple | 20. Parallax Swiper Slider | 21. Dynamic contact form | 22. Cursor Animation | */ /*-------------------------------------------------------------- Scripts initialization --------------------------------------------------------------*/ $.exists = function (selector) { return $(selector).length > 0; }; $(window).on('load', function () { $(window).trigger('scroll'); $(window).trigger('resize'); preloader(); isotopInit(); }); $(function () { $(window).trigger('resize'); mainNav(); stickyHeader(); dynamicBackground(); slickInit(); isotopInit(); review(); modalVideo(); tabs(); accordian(); counterInit(); rippleInit(); parallaxEffect(); hobbleEffect(); hoverTab(); lightGalleryInit(); scrollUp(); portfolioSection(); parallaxSwiperSlider(); fullScreenSwiperSlider(); ecommerce(); if ($.exists('.wow')) { new WOW().init(); } }); $(window).on('scroll', function () { counterInit(); parallaxEffect(); showScrollUp(); }); /*-------------------------------------------------------------- 1. Preloader --------------------------------------------------------------*/ function preloader() { $('.cs-preloader_in').fadeOut(); $('.cs-preloader').delay(150).fadeOut('slow'); } /*-------------------------------------------------------------- 2. Mobile Menu --------------------------------------------------------------*/ function mainNav() { $('.cs-nav').append(''); $('.menu-item-has-children').append( '', ); $('.cs-munu_toggle').on('click', function () { $(this) .toggleClass('cs-toggle_active') .siblings('.cs-nav_list') .slideToggle(); }); $('.cs-munu_dropdown_toggle').on('click', function () { $(this).toggleClass('active').siblings('ul').slideToggle(); $(this).parent().toggleClass('active'); }); // Mega Menu // $('.cs-mega_wrapper>li>a').removeAttr('href'); // Modal Btn $('.cs-mode_btn').on('click', function () { $(this).toggleClass('active'); $('body').toggleClass('cs-dark'); }); // Side Nav $('.cs-icon_btn').on('click', function () { $('.cs-side_header').addClass('active'); }); $('.cs-close, .cs-side_header_overlay').on('click', function () { $('.cs-side_header').removeClass('active'); }); } /*-------------------------------------------------------------- 3. Sticky Header --------------------------------------------------------------*/ function stickyHeader() { var $window = $(window); var lastScrollTop = 0; var $header = $('.cs-sticky_header'); var headerHeight = $header.outerHeight() + 30; $window.scroll(function () { var windowTop = $window.scrollTop(); if (windowTop >= headerHeight) { $header.addClass('cs-gescout_sticky'); } else { $header.removeClass('cs-gescout_sticky'); $header.removeClass('cs-gescout_show'); } if ($header.hasClass('cs-gescout_sticky')) { if (windowTop < lastScrollTop) { $header.addClass('cs-gescout_show'); } else { $header.removeClass('cs-gescout_show'); } } lastScrollTop = windowTop; }); } /*-------------------------------------------------------------- 4. Dynamic Background --------------------------------------------------------------*/ function dynamicBackground() { $('[data-src]').each(function () { var src = $(this).attr('data-src'); $(this).css({ 'background-image': 'url(' + src + ')', }); }); } /*-------------------------------------------------------------- 5. Slick Slider --------------------------------------------------------------*/ function slickInit() { if ($.exists('.cs-slider')) { $('.cs-slider').each(function () { // Slick Variable var $ts = $(this).find('.cs-slider_container'); var $slickActive = $(this).find('.cs-slider_wrapper'); // Auto Play var autoPlayVar = parseInt($ts.attr('data-autoplay'), 10); // Auto Play Time Out var autoplaySpdVar = 3000; if (autoPlayVar > 1) { autoplaySpdVar = autoPlayVar; autoPlayVar = 1; } // Slide Change Speed var speedVar = parseInt($ts.attr('data-speed'), 10); // Slider Loop var loopVar = Boolean(parseInt($ts.attr('data-loop'), 10)); // Slider Center var centerVar = Boolean(parseInt($ts.attr('data-center'), 10)); // Variable Width var variableWidthVar = Boolean( parseInt($ts.attr('data-variable-width'), 10), ); // Pagination var paginaiton = $(this) .find('.cs-pagination') .hasClass('cs-pagination'); // Slide Per View var slidesPerView = $ts.attr('data-slides-per-view'); if (slidesPerView == 1) { slidesPerView = 1; } if (slidesPerView == 'responsive') { var slidesPerView = parseInt($ts.attr('data-add-slides'), 10); var lgPoint = parseInt($ts.attr('data-lg-slides'), 10); var mdPoint = parseInt($ts.attr('data-md-slides'), 10); var smPoint = parseInt($ts.attr('data-sm-slides'), 10); var xsPoing = parseInt($ts.attr('data-xs-slides'), 10); } // Fade Slider var fadeVar = parseInt($($ts).attr('data-fade-slide')); fadeVar === 1 ? (fadeVar = true) : (fadeVar = false); // Slick Active Code $slickActive.slick({ autoplay: autoPlayVar, dots: paginaiton, centerPadding: '28%', speed: speedVar, infinite: loopVar, autoplaySpeed: autoplaySpdVar, centerMode: centerVar, fade: fadeVar, prevArrow: $(this).find('.cs-left_arrow'), nextArrow: $(this).find('.cs-right_arrow'), appendDots: $(this).find('.cs-pagination'), slidesToShow: slidesPerView, variableWidth: variableWidthVar, // slidesToScroll: slidesPerView, responsive: [ { breakpoint: 1600, settings: { slidesToShow: lgPoint, // slidesToScroll: lgPoint, }, }, { breakpoint: 1200, settings: { slidesToShow: mdPoint, // slidesToScroll: mdPoint, }, }, { breakpoint: 992, settings: { slidesToShow: smPoint, // slidesToScroll: smPoint, }, }, { breakpoint: 768, settings: { slidesToShow: xsPoing, slidesToScroll: xsPoing, }, }, ], }); }); } // Testimonial Slider $('.slider-for').slick({ slidesToShow: 1, slidesToScroll: 1, arrows: true, asNavFor: '.slider-nav', }); $('.slider-nav').slick({ slidesToShow: 2, slidesToScroll: 1, asNavFor: '.slider-for', dots: true, centerMode: true, focusOnSelect: true, variableWidth: true, }); } /*-------------------------------------------------------------- 6. Isotop Initialize --------------------------------------------------------------*/ function isotopInit() { if ($.exists('.cs-isotop')) { $('.cs-isotop').isotope({ itemSelector: '.cs-isotop_item', transitionDuration: '0.60s', percentPosition: true, masonry: { columnWidth: '.cs-grid_sizer', }, }); /* Active Class of Portfolio*/ $('.cs-isotop_filter ul li').on('click', function (event) { $(this).siblings('.active').removeClass('active'); $(this).addClass('active'); event.preventDefault(); }); /*=== Portfolio filtering ===*/ $('.cs-isotop_filter ul').on('click', 'a', function () { var filterElement = $(this).attr('data-filter'); $('.cs-isotop').isotope({ filter: filterElement, }); }); } } /*-------------------------------------------------------------- 7. Review --------------------------------------------------------------*/ function review() { $('.cs-rating').each(function () { var review = $(this).data('rating'); var reviewVal = review * 20 + '%'; $(this).find('.cs-rating_percentage').css('width', reviewVal); }); } /*-------------------------------------------------------------- 8. Modal Video --------------------------------------------------------------*/ function modalVideo() { $(document).on('click', '.cs-video_open', function (e) { e.preventDefault(); var video = $(this).attr('href'); video = video.split('?v=')[1].trim(); $('.cs-video_popup_container iframe').attr( 'src', `https://www.youtube.com/embed/${video}`, ); $('.cs-video_popup').addClass('active'); }); $('.cs-video_popup_close, .cs-video_popup_layer').on('click', function (e) { $('.cs-video_popup').removeClass('active'); $('html').removeClass('overflow-hidden'); $('.cs-video_popup_container iframe').attr('src', 'about:blank'); e.preventDefault(); }); } /*-------------------------------------------------------------- 9. Tabs --------------------------------------------------------------*/ function tabs() { $('.cs-tabs .cs-tab_links a').on('click', function (e) { var currentAttrValue = $(this).attr('href'); $('.cs-tabs ' + currentAttrValue) .fadeIn(400) .siblings() .hide(); $(this).parents('li').addClass('active').siblings().removeClass('active'); e.preventDefault(); }); } /*-------------------------------------------------------------- 10. Accordian --------------------------------------------------------------*/ function accordian() { $('.cs-accordian').children('.cs-accordian_body').hide(); $('.cs-accordian.active').children('.cs-accordian_body').show(); $('.cs-accordian_head').on('click', function () { $(this) .parent('.cs-accordian') .siblings() .children('.cs-accordian_body') .slideUp(250); $(this).siblings().slideDown(250); $(this) .parent() .parent() .siblings() .find('.cs-accordian_body') .slideUp(250); /* Accordian Active Class */ $(this).parents('.cs-accordian').addClass('active'); $(this).parent('.cs-accordian').siblings().removeClass('active'); }); } /*-------------------------------------------------------------- 11. Counter Animation --------------------------------------------------------------*/ function counterInit() { if ($.exists('.odometer')) { $(window).on('scroll', function () { function winScrollPosition() { var scrollPos = $(window).scrollTop(), winHeight = $(window).height(); var scrollPosition = Math.round(scrollPos + winHeight / 1.2); return scrollPosition; } $('.odometer').each(function () { var elemOffset = $(this).offset().top; if (elemOffset < winScrollPosition()) { $(this).html($(this).data('count-to')); } }); }); } } /*-------------------------------------------------------------- 12. Ripple --------------------------------------------------------------*/ function rippleInit() { if ($.exists('.cs-ripple_version')) { $('.cs-ripple_version').each(function () { $('.cs-ripple_version').ripples({ resolution: 512, dropRadius: 20, perturbance: 0.04, }); }); } } /*-------------------------------------------------------------- 13. Parallax --------------------------------------------------------------*/ function parallaxEffect() { $('.cs-parallax_bg, .cs-parallax').each(function () { var windowScroll = $(document).scrollTop(), windowHeight = $(window).height(), barOffset = $(this).offset().top, barHeight = $(this).height(), barScrollAtZero = windowScroll - barOffset + windowHeight, barHeightWindowHeight = windowScroll + windowHeight, barScrollUp = barOffset <= windowScroll + windowHeight, barSctollDown = barOffset + barHeight >= windowScroll; if (barSctollDown && barScrollUp) { var calculadedHeight = barHeightWindowHeight - barOffset; var largeEffectPixel = calculadedHeight / 5 - 150; var mediumEffectPixel = calculadedHeight / 20; var miniEffectPixel = calculadedHeight / 10; $(this) .find('.cs-to_left') .css('transform', `translateX(-${miniEffectPixel}px)`); $(this) .find('.cs-to_right') .css('transform', `translateX(${miniEffectPixel}px)`); $(this) .find('.cs-to_up') .css('transform', `translateY(-${miniEffectPixel}px)`); $(this) .find('.cs-to_down') .css('transform', `translateY(${miniEffectPixel}px)`); $(this) .find('.cs-to_rotate') .css('transform', `rotate(${miniEffectPixel}deg)`); $(this).css('background-position', `center -${largeEffectPixel}px`); } }); } /*-------------------------------------------------------------- 14. Hobble Effect --------------------------------------------------------------*/ function hobbleEffect() { $(document) .on('mousemove', '.cs-hobble', function (event) { var halfW = this.clientWidth / 2; var halfH = this.clientHeight / 2; var coorX = halfW - (event.pageX - $(this).offset().left); var coorY = halfH - (event.pageY - $(this).offset().top); var degX1 = (coorY / halfH) * 8 + 'deg'; var degY1 = (coorX / halfW) * -8 + 'deg'; var degX2 = (coorY / halfH) * -50 + 'px'; var degY2 = (coorX / halfW) * 70 + 'px'; var degX3 = (coorY / halfH) * -10 + 'px'; var degY3 = (coorX / halfW) * 10 + 'px'; var degX4 = (coorY / halfH) * 15 + 'deg'; var degY4 = (coorX / halfW) * -15 + 'deg'; var degX5 = (coorY / halfH) * -30 + 'px'; var degY5 = (coorX / halfW) * 60 + 'px'; $(this) .find('.cs-hover_layer1') .css('transform', function () { return ( 'perspective( 800px ) translate3d( 0, 0, 0 ) rotateX(' + degX1 + ') rotateY(' + degY1 + ')' ); }); $(this) .find('.cs-hover_layer2') .css('transform', function () { return ( 'perspective( 800px ) translateY(' + degX2 + ') translateX(' + degY2 + ')' ); }); $(this) .find('.cs-hover_layer3') .css('transform', function () { return ( 'perspective( 800px ) translateX(' + degX3 + ') translateY(' + degY3 + ') scale(1.02)' ); }); }) .on('mouseout', '.cs-hobble', function () { $(this).find('.cs-hover_layer1').removeAttr('style'); $(this).find('.cs-hover_layer2').removeAttr('style'); $(this).find('.cs-hover_layer3').removeAttr('style'); }); } /*-------------------------------------------------------------- 15. Social Button Hover --------------------------------------------------------------*/ function hoverTab() { $('.cs-hover_tab a').hover(function () { $(this) .parents('.cs-hover_tab') .addClass('active') .siblings() .removeClass('active'); }); } /*-------------------------------------------------------------- 16. Light Gallery --------------------------------------------------------------*/ function lightGalleryInit() { $('.cs-lightgallery').each(function () { $(this).lightGallery({ selector: '.cs-lightbox_item', subHtmlSelectorRelative: false, thumbnail: false, mousewheel: true, }); }); } /*-------------------------------------------------------------- 17. Scroll Up --------------------------------------------------------------*/ function scrollUp() { $('.cs-scrollup').on('click', function (e) { e.preventDefault(); $('html,body').animate( { scrollTop: 0, }, 0, ); }); } // For Scroll Up function showScrollUp() { let scroll = $(window).scrollTop(); if (scroll >= 350) { $('.cs-scrollup').addClass('cs-scrollup_show'); } else { $('.cs-scrollup').removeClass('cs-scrollup_show'); } } /*-------------------------------------------------------------- 18. Portfolio Section --------------------------------------------------------------*/ function portfolioSection() { $('.cs-portfolio.cs-style2 .cs-text_btn').hover( function () { $(this) .parents('.cs-portfolio') .find('.cs-portfolio_img') .addClass('active'); }, function () { $(this) .parents('.cs-portfolio') .find('.cs-portfolio_img') .removeClass('active'); }, ); } /*-------------------------------------------------------------- 20. Parallax Swiper Slider --------------------------------------------------------------*/ function parallaxSwiperSlider() { if ($.exists('.cs-parallax_slider')) { // Params let mainSliderSelector = '.cs-parallax_slider', interleaveOffset = 0.5; // Main Slider let mainSliderOptions = { loop: true, speed: 1000, autoplay: false, loopAdditionalSlides: 10, grabCursor: true, watchSlidesProgress: true, mousewheel: true, navigation: { nextEl: '.cs-swiper_button_next', prevEl: '.cs-swiper_button_prev', }, pagination: { el: '.cs-swiper_pagination', clickable: true, }, on: { init: function () { this.autoplay.stop(); }, imagesReady: function () { this.el.classList.remove('loading'); this.autoplay.start(); }, progress: function (swiper) { for (let i = 0; i < swiper.slides.length; i++) { let slideProgress = swiper.slides[i].progress, innerOffset = swiper.width * interleaveOffset, innerTranslate = slideProgress * innerOffset; swiper.slides[i].querySelector( '.cs-swiper_parallax_bg', ).style.transform = 'translateX(' + innerTranslate + 'px)'; } }, touchStart: function (swiper) { for (let i = 0; i < swiper.slides.length; i++) { swiper.slides[i].style.transition = ''; } }, setTransition: function (swiper, transition) { for (let i = 0; i < swiper.slides.length; i++) { swiper.slides[i].style.transition = transition + 'ms'; swiper.slides[i].querySelector( '.cs-swiper_parallax_bg', ).style.transition = transition + 'ms'; } }, }, }; let mainSlider = new Swiper(mainSliderSelector, mainSliderOptions); } } /* Vertical Full Screen Swiper Slider Active */ function fullScreenSwiperSlider() { if ($.exists('.cs-fullscreen_swiper_slider')) { var swiper = new Swiper('.cs-fullscreen_swiper_slider', { direction: 'vertical', mousewheel: true, loop: true, speed: 1000, pagination: { el: '.cs-swiper_pagination', clickable: true, }, navigation: { nextEl: '.cs-swiper_button_next', prevEl: '.cs-swiper_button_prev', }, }); } } /*-------------------------------------------------------------- 21. Dynamic contact form --------------------------------------------------------------*/ function ecommerce() { // Star Rating Input $('.cs-input_rating i').on('click', function () { $(this).siblings().removeClass('fa-solid'); $(this).addClass('fa-solid').prevAll().addClass('fa-solid'); }); // Product Single Slider $('.cs-single_product_thumb').slick({ slidesToShow: 1, slidesToScroll: 1, arrows: false, asNavFor: '.cs-single_product_nav', }); $('.cs-single_product_nav').slick({ slidesToShow: 4, slidesToScroll: 1, asNavFor: '.cs-single_product_thumb', focusOnSelect: true, arrows: false, }); // Check All $('#checkAll').change(function () { var isChecked = $(this).prop('checked'); $('table input[type="checkbox"]').prop('checked', isChecked); }); // Range Slider if ($.exists('#slider-range')) { $('#slider-range').slider({ range: true, min: 0, max: 1000, values: [100, 600], slide: function (event, ui) { $('#amount').val('Price: $' + ui.values[0] + ' - $' + ui.values[1]); }, }); } if ($.exists('#amount')) { $('#amount').val( 'Price: $' + $('#slider-range').slider('values', 0) + ' - $' + $('#slider-range').slider('values', 1), ); } // Counter $('.cs-increment').click(function () { var countElement = $(this).siblings('.cs-quantity_input'); var count = parseInt(countElement.text()); count++; countElement.text(count); }); $('.cs-decrement').click(function () { var countElement = $(this).siblings('.cs-quantity_input'); var count = parseInt(countElement.text()); if (count > 0) { count--; countElement.text(count); } }); } /*-------------------------------------------------------------- 21. Dynamic contact form --------------------------------------------------------------*/ if ($.exists('#cs-form')) { const form = document.getElementById('cs-form'); const result = document.getElementById('cs-result'); form.addEventListener('submit', function (e) { const formData = new FormData(form); e.preventDefault(); var object = {}; formData.forEach((value, key) => { object[key] = value; }); var json = JSON.stringify(object); result.innerHTML = 'Please wait...'; fetch('https://api.web3forms.com/submit', { method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json', }, body: json, }) .then(async response => { let json = await response.json(); if (response.status == 200) { result.innerHTML = json.message; } else { console.log(response); result.innerHTML = json.message; } }) .catch(error => { console.log(error); result.innerHTML = 'Something went wrong!'; }) .then(function () { form.reset(); setTimeout(() => { result.style.display = 'none'; }, 5000); }); }); } /*-------------------------------------------------------------- 22. Cursor Animation --------------------------------------------------------------*/ $(function () { $('body').append(''); $('body').append(''); $( '.cs-text_btn, .cs-site_header a, .cs-down_btn, .cs-social_btns a, .cs-menu_widget', ).on('mouseenter', function () { $('.cs-cursor_lg').addClass('opacity-0'); $('.cs-cursor_sm').addClass('opacity-0'); }); $( '.cs-text_btn, .cs-site_header a, .cs-down_btn, .cs-social_btns a, .cs-menu_widget', ).on('mouseleave', function () { $('.cs-cursor_lg').removeClass('opacity-0'); $('.cs-cursor_sm').removeClass('opacity-0'); }); }); function cursorMovingAnimation(event) { try { const timing = gsap.timeline({ defaults: { x: event.clientX, y: event.clientY, }, }); timing .to('.cs-cursor_lg', { ease: 'power2.out', }) .to( '.cs-cursor_sm', { ease: 'power2.out', }, '-=0.4', ); } catch (err) { console.log(err); } } document.addEventListener('mousemove', cursorMovingAnimation); })(jQuery); // End of use strict