initial
This commit is contained in:
469
assets/js/main.js
Normal file
469
assets/js/main.js
Normal file
@@ -0,0 +1,469 @@
|
||||
(function ($) {
|
||||
'use strict';
|
||||
/*=============================================
|
||||
= Preloader =
|
||||
=============================================*/
|
||||
function preloader() {
|
||||
$('#preloader').delay(0).fadeOut();
|
||||
}
|
||||
/*=============================================
|
||||
= Offcanvas Menu =
|
||||
=============================================*/
|
||||
function offcanvasMenu() {
|
||||
$('.menu-tigger').on('click', function () {
|
||||
$('.offCanvas__info, .offCanvas__overly').addClass('active');
|
||||
return false;
|
||||
});
|
||||
$('.menu-close, .offCanvas__overly').on('click', function () {
|
||||
$('.offCanvas__info, .offCanvas__overly').removeClass('active');
|
||||
});
|
||||
}
|
||||
/*=============================================
|
||||
= Data Background =
|
||||
=============================================*/
|
||||
function dataBackground() {
|
||||
$('[data-background]').each(function () {
|
||||
$(this).css('background-image', 'url(' + $(this).attr('data-background') + ')');
|
||||
});
|
||||
}
|
||||
/*=============================================
|
||||
= Go to top =
|
||||
=============================================*/
|
||||
function progressPageLoad() {
|
||||
var progressWrap = document.querySelector('.btn-scroll-top');
|
||||
if (progressWrap != null) {
|
||||
var progressPath = document.querySelector('.btn-scroll-top path');
|
||||
var pathLength = progressPath.getTotalLength();
|
||||
var offset = 50;
|
||||
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';
|
||||
window.addEventListener('scroll', function (event) {
|
||||
var scroll = document.body.scrollTop || document.documentElement.scrollTop;
|
||||
var height = document.documentElement.scrollHeight - document.documentElement.clientHeight;
|
||||
var progress = pathLength - (scroll * pathLength) / height;
|
||||
progressPath.style.strokeDashoffset = progress;
|
||||
var scrollElementPos = document.body.scrollTop || document.documentElement.scrollTop;
|
||||
if (scrollElementPos >= offset) {
|
||||
progressWrap.classList.add('active-progress');
|
||||
} else {
|
||||
progressWrap.classList.remove('active-progress');
|
||||
}
|
||||
});
|
||||
progressWrap.addEventListener('click', function (e) {
|
||||
e.preventDefault();
|
||||
window.scroll({
|
||||
top: 0,
|
||||
left: 0,
|
||||
behavior: 'smooth',
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
/*=============================================
|
||||
= Aos Active =
|
||||
=============================================*/
|
||||
function aosAnimation() {
|
||||
AOS.init({
|
||||
duration: 1000,
|
||||
mirror: true,
|
||||
once: true,
|
||||
disable: 'mobile',
|
||||
});
|
||||
}
|
||||
/*=============================================
|
||||
= counterState =
|
||||
=============================================*/
|
||||
function counterState() {
|
||||
var counters = document.querySelectorAll('.counter');
|
||||
counters.forEach(function (counter) {
|
||||
var countTo = counter.getAttribute('data-count');
|
||||
var countNum = parseInt(counter.textContent);
|
||||
var duration = 4000;
|
||||
var stepDuration = duration / Math.abs(countTo - countNum);
|
||||
var increment = countTo > countNum ? 1 : -1;
|
||||
var timer = setInterval(function () {
|
||||
countNum += increment;
|
||||
counter.textContent = countNum;
|
||||
if (countNum == countTo) {
|
||||
clearInterval(timer);
|
||||
//alert('finished');
|
||||
}
|
||||
}, stepDuration);
|
||||
});
|
||||
}
|
||||
/*=============================================
|
||||
= Magnific Popup =
|
||||
=============================================*/
|
||||
function magnificPopup() {
|
||||
$('.popup-image').magnificPopup({
|
||||
type: 'image',
|
||||
gallery: {
|
||||
enabled: true,
|
||||
},
|
||||
});
|
||||
/* magnificPopup video view */
|
||||
$('.popup-video').magnificPopup({
|
||||
type: 'iframe',
|
||||
});
|
||||
}
|
||||
/*=============================================
|
||||
= Wow Active =
|
||||
=============================================*/
|
||||
function wowAnimation() {
|
||||
var wow = new WOW({
|
||||
boxClass: 'wow',
|
||||
animateClass: 'animated',
|
||||
offset: 0,
|
||||
mobile: false,
|
||||
live: true,
|
||||
});
|
||||
wow.init();
|
||||
}
|
||||
/*=============================================
|
||||
= Masonary Active =
|
||||
=============================================*/
|
||||
function masonryFillter() {
|
||||
$('.masonary-active').imagesLoaded(function () {
|
||||
var $filter = '.masonary-active',
|
||||
$filterItem = '.filter-item',
|
||||
$filterMenu = '.filter-menu-active';
|
||||
if ($($filter).length > 0) {
|
||||
var $grid = $($filter).isotope({
|
||||
itemSelector: $filterItem,
|
||||
filter: '*',
|
||||
masonry: {
|
||||
// use outer width of grid-sizer for columnWidth
|
||||
// columnWidth: 1,
|
||||
columnWidth: '.grid-sizer',
|
||||
},
|
||||
});
|
||||
// filter items on button click
|
||||
$($filterMenu).on('click', 'button', function () {
|
||||
var filterValue = $(this).attr('data-filter');
|
||||
$grid.isotope({
|
||||
filter: filterValue,
|
||||
});
|
||||
});
|
||||
// Menu Active Class
|
||||
$($filterMenu).on('click', 'button', function (event) {
|
||||
event.preventDefault();
|
||||
$(this).addClass('active');
|
||||
$(this).siblings('.active').removeClass('active');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
function customSwiper() {
|
||||
const sliderone = new Swiper('.slider-one', {
|
||||
slidesPerView: 2,
|
||||
spaceBetween: 20,
|
||||
slidesPerGroup: 1,
|
||||
centeredSlides: false,
|
||||
loop: true,
|
||||
autoplay: {
|
||||
delay: 4000,
|
||||
},
|
||||
breakpoints: {
|
||||
1200: {
|
||||
slidesPerView: 2,
|
||||
},
|
||||
992: {
|
||||
slidesPerView: 2,
|
||||
},
|
||||
768: {
|
||||
slidesPerView: 2,
|
||||
},
|
||||
576: {
|
||||
slidesPerView: 1,
|
||||
},
|
||||
0: {
|
||||
slidesPerView: 1,
|
||||
},
|
||||
},
|
||||
});
|
||||
const slidertwo = new Swiper('.slider-two', {
|
||||
slidesPerView: 1,
|
||||
// spaceBetween: 20,
|
||||
slidesPerGroup: 1,
|
||||
centeredSlides: false,
|
||||
loop: true,
|
||||
autoplay: {
|
||||
delay: 4000,
|
||||
},
|
||||
pagination: {
|
||||
el: '.swiper-pagination',
|
||||
},
|
||||
navigation: {
|
||||
nextEl: '.swiper-button-next',
|
||||
prevEl: '.swiper-button-prev',
|
||||
},
|
||||
});
|
||||
const slider1 = new Swiper('.slider-1', {
|
||||
slidesPerView: 3,
|
||||
spaceBetween: 20,
|
||||
slidesPerGroup: 1,
|
||||
centeredSlides: false,
|
||||
loop: true,
|
||||
autoplay: {
|
||||
delay: 4000,
|
||||
},
|
||||
breakpoints: {
|
||||
1200: {
|
||||
slidesPerView: 3,
|
||||
},
|
||||
992: {
|
||||
slidesPerView: 3,
|
||||
},
|
||||
768: {
|
||||
slidesPerView: 2,
|
||||
},
|
||||
576: {
|
||||
slidesPerView: 1,
|
||||
},
|
||||
0: {
|
||||
slidesPerView: 1,
|
||||
},
|
||||
},
|
||||
navigation: {
|
||||
nextEl: '.swiper-button-next',
|
||||
prevEl: '.swiper-button-prev',
|
||||
},
|
||||
pagination: {
|
||||
el: '.swiper-pagination',
|
||||
},
|
||||
});
|
||||
const slider2 = new Swiper('.slider-2', {
|
||||
slidesPerView: 4,
|
||||
spaceBetween: 30,
|
||||
slidesPerGroup: 1,
|
||||
centeredSlides: false,
|
||||
loop: true,
|
||||
autoplay: {
|
||||
delay: 4000,
|
||||
},
|
||||
breakpoints: {
|
||||
1200: {
|
||||
slidesPerView: 4,
|
||||
},
|
||||
992: {
|
||||
slidesPerView: 3,
|
||||
},
|
||||
768: {
|
||||
slidesPerView: 2,
|
||||
},
|
||||
576: {
|
||||
slidesPerView: 1,
|
||||
},
|
||||
0: {
|
||||
slidesPerView: 1,
|
||||
},
|
||||
},
|
||||
navigation: {
|
||||
nextEl: '.swiper-button-next',
|
||||
prevEl: '.swiper-button-prev',
|
||||
},
|
||||
on: {
|
||||
afterInit: function () {
|
||||
// set padding left slide
|
||||
var leftPadding = 0;
|
||||
var swipperRoot = $('.swipper-root');
|
||||
if (swipperRoot.length > 0) {
|
||||
leftPadding = swipperRoot.offset().left;
|
||||
}
|
||||
if ($('.box-swiper-padding').length > 0) {
|
||||
$('.box-swiper-padding').css('padding-left', leftPadding + 'px');
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
const slider5 = new Swiper('.slider-5', {
|
||||
slidesPerView: 5,
|
||||
spaceBetween: 30,
|
||||
slidesPerGroup: 1,
|
||||
centeredSlides: false,
|
||||
loop: true,
|
||||
autoplay: {
|
||||
delay: 4000,
|
||||
},
|
||||
breakpoints: {
|
||||
1200: {
|
||||
slidesPerView: 5,
|
||||
},
|
||||
992: {
|
||||
slidesPerView: 4,
|
||||
},
|
||||
768: {
|
||||
slidesPerView: 3,
|
||||
},
|
||||
576: {
|
||||
slidesPerView: 2,
|
||||
},
|
||||
0: {
|
||||
slidesPerView: 1,
|
||||
},
|
||||
},
|
||||
navigation: {
|
||||
nextEl: '.swiper-button-next',
|
||||
prevEl: '.swiper-button-prev',
|
||||
},
|
||||
on: {
|
||||
afterInit: function () {
|
||||
// set padding left slide
|
||||
var leftPadding = 0;
|
||||
var swipperRoot = $('.swipper-root');
|
||||
if (swipperRoot.length > 0) {
|
||||
leftPadding = swipperRoot.offset().left;
|
||||
}
|
||||
if ($('.box-swiper-padding').length > 0) {
|
||||
$('.box-swiper-padding').css('padding-left', leftPadding + 'px');
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
function carauselScroll() {
|
||||
$('.carouselTicker-left').each(function () {
|
||||
$(this).carouselTicker({
|
||||
direction: 'prev',
|
||||
speed: 1,
|
||||
delay: 30,
|
||||
});
|
||||
});
|
||||
$('.carouselTicker-right').each(function () {
|
||||
$(this).carouselTicker({
|
||||
direction: 'next',
|
||||
speed: 1,
|
||||
delay: 30,
|
||||
});
|
||||
});
|
||||
}
|
||||
function odometerCounter() {
|
||||
if ($('.odometer').length > 0) {
|
||||
$('.odometer').appear(function (e) {
|
||||
var odo = $('.odometer');
|
||||
odo.each(function () {
|
||||
var countNumber = $(this).attr('data-count');
|
||||
$(this).html(countNumber);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
$('.change-price-plan li a').on('click', function (e) {
|
||||
e.preventDefault();
|
||||
$('.change-price-plan li a').removeClass('active');
|
||||
$(this).addClass('active');
|
||||
var type = $(this).attr('data-type');
|
||||
if (type == 'monthly') {
|
||||
$('.text-price-standard').html('49');
|
||||
$('.text-type-standard').html('/ month');
|
||||
$('.text-price-business').html('69');
|
||||
$('.text-type-business').html('/ month');
|
||||
$('.text-price-enterprise').html('99');
|
||||
$('.text-type-enterprise').html('/ month');
|
||||
} else {
|
||||
$('.text-price-standard').html('441');
|
||||
$('.text-type-standard').html('/ year');
|
||||
$('.text-price-business').html('621');
|
||||
$('.text-type-business').html('/ year');
|
||||
$('.text-price-enterprise').html('891');
|
||||
$('.text-type-enterprise').html('/ year');
|
||||
}
|
||||
});
|
||||
function inputFocus() {
|
||||
$('input')
|
||||
.focus(function () {
|
||||
$(this).closest('div.input-group').addClass('focus');
|
||||
})
|
||||
.blur(function () {
|
||||
$(this).closest('div.input-group').removeClass('focus');
|
||||
});
|
||||
$('textarea')
|
||||
.focus(function () {
|
||||
$(this).closest('div.input-group').addClass('focus');
|
||||
})
|
||||
.blur(function () {
|
||||
$(this).closest('div.input-group').removeClass('focus');
|
||||
});
|
||||
$('select')
|
||||
.focus(function () {
|
||||
$(this).closest('div.input-group').addClass('focus');
|
||||
})
|
||||
.blur(function () {
|
||||
$(this).closest('div.input-group').removeClass('focus');
|
||||
});
|
||||
}
|
||||
|
||||
function mobileHeaderActive() {
|
||||
var navbarTrigger = $('.burger-icon'),
|
||||
navCanvas = $('.burger-icon-2'),
|
||||
closeCanvas = $('.close-canvas'),
|
||||
endTrigger = $('.mobile-menu-close'),
|
||||
container = $('.mobile-header-active'),
|
||||
containerCanvas = $('.sidebar-canvas-wrapper'),
|
||||
wrapper4 = $('body');
|
||||
wrapper4.prepend('<div class="body-overlay-1"></div>');
|
||||
navbarTrigger.on('click', function (e) {
|
||||
navbarTrigger.toggleClass('burger-close');
|
||||
e.preventDefault();
|
||||
container.toggleClass('sidebar-visible');
|
||||
wrapper4.toggleClass('mobile-menu-active');
|
||||
});
|
||||
|
||||
endTrigger.on('click', function () {
|
||||
container.removeClass('sidebar-visible');
|
||||
wrapper4.removeClass('mobile-menu-active');
|
||||
});
|
||||
|
||||
var $offCanvasNav = $('.mobile-menu'),
|
||||
$offCanvasNavSubMenu = $offCanvasNav.find('.sub-menu');
|
||||
/*Add Toggle Button With Off Canvas Sub Menu*/
|
||||
$offCanvasNavSubMenu.parent().prepend('<span class="menu-expand"><i class="arrow-small-down"></i></span>');
|
||||
/*Close Off Canvas Sub Menu*/
|
||||
$offCanvasNavSubMenu.slideUp();
|
||||
/*Category Sub Menu Toggle*/
|
||||
$offCanvasNav.on('click', 'li a, li .menu-expand', function (e) {
|
||||
var $this = $(this);
|
||||
if (
|
||||
$this
|
||||
.parent()
|
||||
.attr('class')
|
||||
.match(/\b(menu-item-has-children|has-children|has-sub-menu)\b/) &&
|
||||
($this.attr('href') === '#' || $this.hasClass('menu-expand'))
|
||||
) {
|
||||
e.preventDefault();
|
||||
if ($this.siblings('ul:visible').length) {
|
||||
$this.parent('li').removeClass('active');
|
||||
$this.siblings('ul').slideUp();
|
||||
} else {
|
||||
$this.parent('li').addClass('active');
|
||||
$this.closest('li').siblings('li').removeClass('active').find('li').removeClass('active');
|
||||
$this.closest('li').siblings('li').find('ul:visible').slideUp();
|
||||
$this.siblings('ul').slideDown();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/*=============================================
|
||||
= Page Load =
|
||||
=============================================*/
|
||||
$(window).on('load', function () {
|
||||
preloader();
|
||||
progressPageLoad();
|
||||
offcanvasMenu();
|
||||
dataBackground();
|
||||
aosAnimation();
|
||||
counterState();
|
||||
customSwiper();
|
||||
magnificPopup();
|
||||
wowAnimation();
|
||||
carauselScroll();
|
||||
odometerCounter();
|
||||
masonryFillter();
|
||||
inputFocus();
|
||||
mobileHeaderActive();
|
||||
});
|
||||
})(jQuery);
|
10
assets/js/vendors/ScrollToPlugin.min.js
vendored
Normal file
10
assets/js/vendors/ScrollToPlugin.min.js
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
/*!
|
||||
* ScrollToPlugin 3.12.0
|
||||
* https://greensock.com
|
||||
*
|
||||
* @license Copyright 2023, GreenSock. All rights reserved.
|
||||
* Subject to the terms at https://greensock.com/standard-license or for Club GreenSock members, the agreement issued with that membership.
|
||||
* @author: Jack Doyle, jack@greensock.com
|
||||
*/
|
||||
|
||||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).window=e.window||{})}(this,function(e){"use strict";function l(){return"undefined"!=typeof window}function m(){return f||l()&&(f=window.gsap)&&f.registerPlugin&&f}function n(e){return"string"==typeof e}function o(e){return"function"==typeof e}function p(e,t){var o="x"===t?"Width":"Height",n="scroll"+o,l="client"+o;return e===T||e===i||e===c?Math.max(i[n],c[n])-(T["inner"+o]||i[l]||c[l]):e[n]-e["offset"+o]}function q(e,t){var o="scroll"+("x"===t?"Left":"Top");return e===T&&(null!=e.pageXOffset?o="page"+t.toUpperCase()+"Offset":e=null!=i[o]?i:c),function(){return e[o]}}function s(e,t){if(!(e=y(e)[0])||!e.getBoundingClientRect)return console.warn("scrollTo target doesn't exist. Using 0")||{x:0,y:0};var o=e.getBoundingClientRect(),n=!t||t===T||t===c,l=n?{top:i.clientTop-(T.pageYOffset||i.scrollTop||c.scrollTop||0),left:i.clientLeft-(T.pageXOffset||i.scrollLeft||c.scrollLeft||0)}:t.getBoundingClientRect(),r={x:o.left-l.left,y:o.top-l.top};return!n&&t&&(r.x+=q(t,"x")(),r.y+=q(t,"y")()),r}function t(e,t,o,l,r){return isNaN(e)||"object"==typeof e?n(e)&&"="===e.charAt(1)?parseFloat(e.substr(2))*("-"===e.charAt(0)?-1:1)+l-r:"max"===e?p(t,o)-r:Math.min(p(t,o),s(e,t)[o]-r):parseFloat(e)-r}function u(){f=m(),l()&&f&&"undefined"!=typeof document&&document.body&&(T=window,c=document.body,i=document.documentElement,y=f.utils.toArray,f.config({autoKillThreshold:7}),v=f.config(),a=1)}var f,a,T,i,c,y,v,h,r={version:"3.12.0",name:"scrollTo",rawVars:1,register:function register(e){f=e,u()},init:function init(e,l,r,s,i){a||u();var p=this,c=f.getProperty(e,"scrollSnapType");p.isWin=e===T,p.target=e,p.tween=r,l=function _clean(e,t,l,r){if(o(e)&&(e=e(t,l,r)),"object"!=typeof e)return n(e)&&"max"!==e&&"="!==e.charAt(1)?{x:e,y:e}:{y:e};if(e.nodeType)return{y:e,x:e};var s,i={};for(s in e)i[s]="onAutoKill"!==s&&o(e[s])?e[s](t,l,r):e[s];return i}(l,s,e,i),p.vars=l,p.autoKill=!!l.autoKill,p.getX=q(e,"x"),p.getY=q(e,"y"),p.x=p.xPrev=p.getX(),p.y=p.yPrev=p.getY(),h=h||f.core.globals().ScrollTrigger,"smooth"===f.getProperty(e,"scrollBehavior")&&f.set(e,{scrollBehavior:"auto"}),c&&"none"!==c&&(p.snap=1,p.snapInline=e.style.scrollSnapType,e.style.scrollSnapType="none"),null!=l.x?(p.add(p,"x",p.x,t(l.x,e,"x",p.x,l.offsetX||0),s,i),p._props.push("scrollTo_x")):p.skipX=1,null!=l.y?(p.add(p,"y",p.y,t(l.y,e,"y",p.y,l.offsetY||0),s,i),p._props.push("scrollTo_y")):p.skipY=1},render:function render(e,t){for(var o,n,l,r,s,i=t._pt,c=t.target,u=t.tween,f=t.autoKill,a=t.xPrev,y=t.yPrev,d=t.isWin,g=t.snap,x=t.snapInline;i;)i.r(e,i.d),i=i._next;o=d||!t.skipX?t.getX():a,l=(n=d||!t.skipY?t.getY():y)-y,r=o-a,s=v.autoKillThreshold,t.x<0&&(t.x=0),t.y<0&&(t.y=0),f&&(!t.skipX&&(s<r||r<-s)&&o<p(c,"x")&&(t.skipX=1),!t.skipY&&(s<l||l<-s)&&n<p(c,"y")&&(t.skipY=1),t.skipX&&t.skipY&&(u.kill(),t.vars.onAutoKill&&t.vars.onAutoKill.apply(u,t.vars.onAutoKillParams||[]))),d?T.scrollTo(t.skipX?o:t.x,t.skipY?n:t.y):(t.skipY||(c.scrollTop=t.y),t.skipX||(c.scrollLeft=t.x)),!g||1!==e&&0!==e||(n=c.scrollTop,o=c.scrollLeft,x?c.style.scrollSnapType=x:c.style.removeProperty("scroll-snap-type"),c.scrollTop=n+1,c.scrollLeft=o+1,c.scrollTop=n,c.scrollLeft=o),t.xPrev=t.x,t.yPrev=t.y,h&&h.update()},kill:function kill(e){var t="scrollTo"===e;!t&&"scrollTo_x"!==e||(this.skipX=1),!t&&"scrollTo_y"!==e||(this.skipY=1)}};r.max=p,r.getOffset=s,r.buildGetter=q,m()&&f.registerPlugin(r),e.ScrollToPlugin=r,e.default=r;if (typeof(window)==="undefined"||window!==e){Object.defineProperty(e,"__esModule",{value:!0})} else {delete e.default}});
|
10
assets/js/vendors/ScrollTrigger.min.js
vendored
Normal file
10
assets/js/vendors/ScrollTrigger.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
assets/js/vendors/aos.js
vendored
Normal file
1
assets/js/vendors/aos.js
vendored
Normal file
File diff suppressed because one or more lines are too long
7
assets/js/vendors/bootstrap.bundle.min.js
vendored
Normal file
7
assets/js/vendors/bootstrap.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
56
assets/js/vendors/bouncing-blob.js
vendored
Normal file
56
assets/js/vendors/bouncing-blob.js
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
const MIN_SPEED = 1.5;
|
||||
const MAX_SPEED = 2.5;
|
||||
function randomNumber(min, max) {
|
||||
return Math.random() * (max - min) + min;
|
||||
}
|
||||
class Blob {
|
||||
constructor(el) {
|
||||
this.el = el;
|
||||
const boundingRect = this.el.getBoundingClientRect();
|
||||
this.size = boundingRect.width;
|
||||
this.initialX = randomNumber(0, window.innerWidth - this.size);
|
||||
this.initialY = randomNumber(0, window.innerHeight - this.size);
|
||||
this.el.style.top = `${this.initialY}px`;
|
||||
this.el.style.left = `${this.initialX}px`;
|
||||
this.vx = randomNumber(MIN_SPEED, MAX_SPEED) * (Math.random() > 0.5 ? 1 : -1);
|
||||
this.vy = randomNumber(MIN_SPEED, MAX_SPEED) * (Math.random() > 0.5 ? 1 : -1);
|
||||
this.x = this.initialX;
|
||||
this.y = this.initialY;
|
||||
}
|
||||
update() {
|
||||
this.x += this.vx;
|
||||
this.y += this.vy;
|
||||
if (this.x >= window.innerWidth - this.size) {
|
||||
this.x = window.innerWidth - this.size;
|
||||
this.vx *= -1;
|
||||
}
|
||||
if (this.y >= window.innerHeight - this.size) {
|
||||
this.y = window.innerHeight - this.size;
|
||||
this.vy *= -1;
|
||||
}
|
||||
if (this.x <= 0) {
|
||||
this.x = 0;
|
||||
this.vx *= -1;
|
||||
}
|
||||
if (this.y <= 0) {
|
||||
this.y = 0;
|
||||
this.vy *= -1;
|
||||
}
|
||||
}
|
||||
move() {
|
||||
this.el.style.transform = `translate(${this.x - this.initialX}px, ${this.y - this.initialY}px)`;
|
||||
}
|
||||
}
|
||||
function initBlobs() {
|
||||
const blobEls = document.querySelectorAll('.bouncing-blob');
|
||||
const blobs = Array.from(blobEls).map((blobEl) => new Blob(blobEl));
|
||||
function update() {
|
||||
requestAnimationFrame(update);
|
||||
blobs.forEach((blob) => {
|
||||
blob.update();
|
||||
blob.move();
|
||||
});
|
||||
}
|
||||
requestAnimationFrame(update);
|
||||
}
|
||||
initBlobs();
|
42
assets/js/vendors/color-modes.js
vendored
Normal file
42
assets/js/vendors/color-modes.js
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
"use strict";
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
// Get all dark-light switchers
|
||||
var switchers = document.querySelectorAll(".dark-light-switcher");
|
||||
|
||||
// Function to update icons and theme
|
||||
function updateTheme(isDarkMode) {
|
||||
switchers.forEach(function (switcher) {
|
||||
var darkIcon = switcher.querySelector(".bi-sun-fill");
|
||||
var lightIcon = switcher.querySelector(".bi-moon-stars-fill");
|
||||
|
||||
if (isDarkMode) {
|
||||
lightIcon.style.display = "none";
|
||||
darkIcon.style.display = "block";
|
||||
} else {
|
||||
lightIcon.style.display = "block";
|
||||
darkIcon.style.display = "none";
|
||||
}
|
||||
});
|
||||
|
||||
document.documentElement.setAttribute("data-bs-theme", isDarkMode ? "dark" : "light");
|
||||
}
|
||||
|
||||
// Retrieve stored theme and update the theme on page load
|
||||
var storedTheme = localStorage.getItem("theme");
|
||||
var isDarkMode = storedTheme === "dark";
|
||||
updateTheme(isDarkMode);
|
||||
|
||||
// Add event listeners to all switchers
|
||||
switchers.forEach(function (switcher) {
|
||||
switcher.addEventListener("click", function () {
|
||||
var currentTheme = localStorage.getItem("theme");
|
||||
var isDarkMode = currentTheme === "dark";
|
||||
|
||||
// Toggle theme
|
||||
var newTheme = isDarkMode ? "light" : "dark";
|
||||
localStorage.setItem("theme", newTheme);
|
||||
updateTheme(newTheme === "dark");
|
||||
});
|
||||
});
|
||||
});
|
464
assets/js/vendors/gsap-custom.js
vendored
Normal file
464
assets/js/vendors/gsap-custom.js
vendored
Normal file
@@ -0,0 +1,464 @@
|
||||
(function ($) {
|
||||
('use strict');
|
||||
// Detect mobile device (Do not remove!!!)
|
||||
var isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Nokia|Opera Mini/i.test(navigator.userAgent) ? true : false;
|
||||
if (isMobile) {
|
||||
$('body').addClass('is-mobile');
|
||||
}
|
||||
var tl = gsap.timeline();
|
||||
var $pageAppear = $('.appear');
|
||||
if ($pageAppear.length) {
|
||||
tl.from(
|
||||
$pageAppear,
|
||||
{
|
||||
duration: 2,
|
||||
y: 40,
|
||||
autoAlpha: 0,
|
||||
stagger: 0.3,
|
||||
ease: Expo.easeOut,
|
||||
clearProps: 'all',
|
||||
},
|
||||
1.5,
|
||||
);
|
||||
}
|
||||
//PARALLAX ITEM
|
||||
$('.parallax-item').wrap('<div class="parallax-item-wrap"></div>');
|
||||
const itemWraps = document.querySelectorAll('.parallax-item-wrap');
|
||||
const calcValue = (value, inputMax, inputMin, outputMax, outputMin) => {
|
||||
const percent = (value - inputMin) / (inputMax - inputMin);
|
||||
const output = percent * (outputMax - outputMin) + outputMin;
|
||||
return output;
|
||||
};
|
||||
itemWraps.forEach(function (itemWrap) {
|
||||
const item = itemWrap.querySelector('.parallax-item');
|
||||
itemWrap.addEventListener('mousemove', function (e) {
|
||||
const mouseX = e.clientX;
|
||||
const mouseY = e.clientY;
|
||||
const rect = itemWrap.getBoundingClientRect();
|
||||
const offsetX = rect.left + rect.width / 2;
|
||||
const offsetY = rect.top + rect.height / 2;
|
||||
const deltaX = mouseX - offsetX;
|
||||
const deltaY = mouseY - offsetY;
|
||||
const percentX = deltaX / (itemWrap.clientWidth / 2);
|
||||
const percentY = deltaY / (itemWrap.clientHeight / 2);
|
||||
TweenMax.to(item, 0.5, {
|
||||
x: calcValue(percentX, 1, -1, 20, -20),
|
||||
y: calcValue(percentY, 1, -1, 20, -20),
|
||||
rotationX: calcValue(percentY, 1, -1, 5, -5),
|
||||
rotationY: calcValue(percentX, 1, -1, -5, 5),
|
||||
ease: Power1.easeOut,
|
||||
});
|
||||
});
|
||||
itemWrap.addEventListener('mouseleave', function (e) {
|
||||
TweenMax.to(item, 0.5, {
|
||||
x: 0,
|
||||
y: 0,
|
||||
rotationX: 0,
|
||||
rotationY: 0,
|
||||
ease: Power1.easeOut,
|
||||
});
|
||||
});
|
||||
});
|
||||
//GSAP scrollTrigger
|
||||
gsap.registerPlugin(ScrollTrigger);
|
||||
let animationRotate = document.querySelectorAll('.animation-rotate');
|
||||
animationRotate.forEach((animationRotate) => {
|
||||
gsap.to(animationRotate, {
|
||||
duration: 2,
|
||||
rotation: 360,
|
||||
ease: 'linear',
|
||||
repeat: -1,
|
||||
});
|
||||
});
|
||||
let scrollRotate = document.querySelectorAll('.scroll-rotate');
|
||||
scrollRotate.forEach((scrollRotate) => {
|
||||
gsap.to(scrollRotate, {
|
||||
scrollTrigger: {
|
||||
trigger: scrollRotate,
|
||||
scrub: 2,
|
||||
},
|
||||
rotation: 720,
|
||||
});
|
||||
});
|
||||
let scrollMoveRight = document.querySelectorAll('.scroll-move-right');
|
||||
scrollMoveRight.forEach((scrollMoveRight) => {
|
||||
gsap.to(scrollMoveRight, {
|
||||
x: 500,
|
||||
duration: 1.5,
|
||||
scrollTrigger: {
|
||||
trigger: scrollMoveRight,
|
||||
start: 'top 30%',
|
||||
scrub: 2,
|
||||
},
|
||||
});
|
||||
});
|
||||
let scrollMoveLeft = document.querySelectorAll('.scroll-move-left');
|
||||
scrollMoveLeft.forEach((scrollMoveLeft) => {
|
||||
gsap.to(scrollMoveLeft, {
|
||||
x: -500,
|
||||
duration: 1.5,
|
||||
scrollTrigger: {
|
||||
trigger: scrollMoveLeft,
|
||||
start: 'top 30%',
|
||||
scrub: 2,
|
||||
},
|
||||
});
|
||||
});
|
||||
let scrollMoveRight2 = document.querySelectorAll('.scroll-move-right2');
|
||||
scrollMoveRight2.forEach((scrollMoveRight2) => {
|
||||
gsap.to(scrollMoveRight2, {
|
||||
x: 800,
|
||||
duration: 1.5,
|
||||
scrollTrigger: {
|
||||
trigger: scrollMoveRight2,
|
||||
start: 'top 80%',
|
||||
scrub: 2,
|
||||
},
|
||||
});
|
||||
});
|
||||
let scrollMoveLeft2 = document.querySelectorAll('.scroll-move-left2');
|
||||
scrollMoveLeft2.forEach((scrollMoveLeft2) => {
|
||||
gsap.to(scrollMoveLeft2, {
|
||||
x: -400,
|
||||
duration: 1.5,
|
||||
scrollTrigger: {
|
||||
trigger: scrollMoveLeft2,
|
||||
start: 'top 100%',
|
||||
scrub: 2,
|
||||
},
|
||||
});
|
||||
});
|
||||
let scrollMoveUp = document.querySelectorAll('.scroll-move-up');
|
||||
scrollMoveUp.forEach((scrollMoveUp) => {
|
||||
gsap.to(scrollMoveUp, {
|
||||
y: -400,
|
||||
duration: 1.5,
|
||||
scrollTrigger: {
|
||||
trigger: scrollMoveUp,
|
||||
start: 'top 20%',
|
||||
scrub: 2,
|
||||
},
|
||||
});
|
||||
});
|
||||
let growUp = document.querySelectorAll('.grow-up');
|
||||
growUp.forEach((growUp) => {
|
||||
gsap.fromTo(
|
||||
growUp,
|
||||
{
|
||||
autoAlpha: 0.5,
|
||||
scale: 0.7,
|
||||
},
|
||||
{
|
||||
autoAlpha: 1,
|
||||
duration: 2,
|
||||
scale: 1,
|
||||
scrollTrigger: {
|
||||
trigger: growUp,
|
||||
start: 'top 90%',
|
||||
},
|
||||
stagger: 0.2,
|
||||
},
|
||||
);
|
||||
});
|
||||
let scrollZoomIn = document.querySelectorAll('.scroll-zoom-in');
|
||||
scrollZoomIn.forEach((scrollZoomIn) => {
|
||||
gsap.to(scrollZoomIn, {
|
||||
scrollTrigger: {
|
||||
trigger: scrollZoomIn,
|
||||
start: 'top 10%',
|
||||
scrub: 2,
|
||||
},
|
||||
scale: 1.2,
|
||||
});
|
||||
});
|
||||
let scrollZoomIn2 = document.querySelectorAll('.scroll-zoom-in-2');
|
||||
scrollZoomIn2.forEach((scrollZoomIn2) => {
|
||||
gsap.to(scrollZoomIn2, {
|
||||
scrollTrigger: {
|
||||
trigger: scrollZoomIn2,
|
||||
start: 'top 90%',
|
||||
scrub: 2,
|
||||
},
|
||||
scale: 1,
|
||||
});
|
||||
});
|
||||
let scrollZoomOut = document.querySelectorAll('.scroll-zoom-out');
|
||||
scrollZoomOut.forEach((scrollZoomOut) => {
|
||||
gsap.to(scrollZoomOut, {
|
||||
scrollTrigger: {
|
||||
trigger: scrollZoomOut,
|
||||
start: 'top 5%',
|
||||
scrub: 2,
|
||||
},
|
||||
scale: 0.5,
|
||||
});
|
||||
});
|
||||
$('.scoll-reduce-border-radius').each(function () {
|
||||
$(this).wrap('<div class="scoll-reduce-border-wraper"></div>');
|
||||
});
|
||||
let reduceBorderRadius = document.querySelectorAll('.scoll-reduce-border-wraper');
|
||||
reduceBorderRadius.forEach((reduceBorderRadius) => {
|
||||
gsap.to(reduceBorderRadius, {
|
||||
scrollTrigger: {
|
||||
trigger: reduceBorderRadius,
|
||||
start: 'top 98%',
|
||||
end: 'top 50%',
|
||||
duration: 0,
|
||||
scrub: 2,
|
||||
},
|
||||
borderRadius: '0',
|
||||
});
|
||||
});
|
||||
let revealContainers = document.querySelectorAll('.reveal-img');
|
||||
revealContainers.forEach((revealContainers) => {
|
||||
let image = revealContainers.querySelector('img');
|
||||
let tl4 = gsap.timeline({
|
||||
scrollTrigger: {
|
||||
trigger: revealContainers,
|
||||
toggleActions: 'restart none none reset',
|
||||
},
|
||||
});
|
||||
tl4.set(revealContainers, { autoAlpha: 1 });
|
||||
tl4.from(revealContainers, 1.5, {
|
||||
xPercent: -100,
|
||||
ease: Power2.out,
|
||||
});
|
||||
tl4.from(image, 1.5, {
|
||||
xPercent: 100,
|
||||
scale: 1.3,
|
||||
delay: -1.5,
|
||||
ease: Power2.out,
|
||||
});
|
||||
});
|
||||
//TEXT-UP
|
||||
if ($(window).width() > 500) {
|
||||
$('.text-up').each(function () {
|
||||
$(this).wrap('<div class="reveal-text-cover"><div class="reveal-text"></div></div>');
|
||||
});
|
||||
}
|
||||
const revealTexts = document.querySelectorAll('.reveal-text');
|
||||
revealTexts.forEach((revealText) => {
|
||||
gsap.set(revealText, { y: 120, opacity: 0 });
|
||||
gsap.to(revealText, {
|
||||
duration: 1,
|
||||
y: 0,
|
||||
opacity: 1,
|
||||
ease: Power3.easeOut,
|
||||
scrollTrigger: {
|
||||
trigger: revealText,
|
||||
start: 'top 80%',
|
||||
end: 'top 20%',
|
||||
toggleActions: 'play none none reverse',
|
||||
},
|
||||
});
|
||||
});
|
||||
//FADEIN-UP
|
||||
const fadeInUp = document.querySelectorAll('.fadeInUp');
|
||||
fadeInUp.forEach((fadeInUp) => {
|
||||
gsap.fromTo(
|
||||
fadeInUp,
|
||||
{
|
||||
opacity: 0,
|
||||
scale: 0.8,
|
||||
y: 150,
|
||||
},
|
||||
{
|
||||
opacity: 1,
|
||||
duration: 1.5,
|
||||
scale: 1,
|
||||
y: 0,
|
||||
},
|
||||
);
|
||||
});
|
||||
let scrollMoveUp2 = document.querySelectorAll('.scroll-move-up-2');
|
||||
scrollMoveUp2.forEach((scrollMoveUp2) => {
|
||||
gsap.to(scrollMoveUp2, {
|
||||
y: -100,
|
||||
duration: 1.5,
|
||||
scrollTrigger: {
|
||||
trigger: scrollMoveUp2,
|
||||
start: 'top 70%',
|
||||
scrub: 2,
|
||||
},
|
||||
});
|
||||
});
|
||||
let scrollMoveUp3 = document.querySelectorAll('.scroll-move-up-3');
|
||||
scrollMoveUp3.forEach((scrollMoveUp3) => {
|
||||
gsap.to(scrollMoveUp3, {
|
||||
y: -80,
|
||||
duration: 2,
|
||||
scrollTrigger: {
|
||||
trigger: scrollMoveUp3,
|
||||
start: 'top 70%',
|
||||
scrub: 2,
|
||||
},
|
||||
});
|
||||
});
|
||||
//FILLTER BUTTON
|
||||
let btnTags = document.querySelectorAll('.btn-tags.btn-filter');
|
||||
btnTags.forEach((btnTags) => {
|
||||
gsap.from(btnTags, {
|
||||
duration: 2,
|
||||
scale: 0.8,
|
||||
opacity: 0,
|
||||
delay: 0,
|
||||
stagger: 0.2,
|
||||
ease: 'elastic',
|
||||
force3D: true,
|
||||
scrollTrigger: {
|
||||
trigger: btnTags,
|
||||
start: 'top 80%',
|
||||
},
|
||||
});
|
||||
});
|
||||
function numberWithCommas(x) {
|
||||
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
||||
}
|
||||
// Image parallax
|
||||
// ===============
|
||||
var imageParallax = document.querySelectorAll('.parallax-image');
|
||||
if (imageParallax.length > 0) {
|
||||
$('.parallax-image').each(function () {
|
||||
// Add wrap <div>.
|
||||
$(this).wrap('<div class="parallax-image-wrap"><div class="parallax-image-inner"></div></div>');
|
||||
// Add overflow hidden.
|
||||
$('.parallax-image-wrap').css({ overflow: 'hidden' });
|
||||
var $animImageParallax = $(this);
|
||||
var $aipWrap = $animImageParallax.parents('.parallax-image-wrap');
|
||||
var $aipInner = $aipWrap.find('.parallax-image-inner');
|
||||
let tl_ImageParallax = gsap.timeline({
|
||||
scrollTrigger: {
|
||||
trigger: $aipWrap,
|
||||
start: 'top bottom',
|
||||
end: 'bottom top',
|
||||
scrub: true,
|
||||
onEnter: () => animImgParallaxRefresh(),
|
||||
},
|
||||
});
|
||||
tl_ImageParallax.to($animImageParallax, { yPercent: 30, ease: 'none' });
|
||||
function animImgParallaxRefresh() {
|
||||
tl_ImageParallax.scrollTrigger.refresh();
|
||||
}
|
||||
// Zoom in
|
||||
let tl_aipZoomIn = gsap.timeline({
|
||||
scrollTrigger: {
|
||||
trigger: $aipWrap,
|
||||
start: 'top 99%',
|
||||
},
|
||||
});
|
||||
tl_aipZoomIn.from($aipInner, { duration: 1.5, autoAlpha: 0, scale: 1.2, ease: Power2.easeOut, clearProps: 'all' });
|
||||
});
|
||||
}
|
||||
// SHOW IMAGE WHEN HOVER DIV
|
||||
const imageHoverShow = gsap.utils.toArray('.image-show-item');
|
||||
imageHoverShow.forEach((target) => {
|
||||
const image = target.querySelector('.project__img');
|
||||
const tlImageShow = gsap.timeline();
|
||||
tlImageShow
|
||||
.fromTo(
|
||||
image,
|
||||
{
|
||||
autoAlpha: 0,
|
||||
duration: 1,
|
||||
clipPath: 'polygon(0 0, 100% 0, 100% 0, 0 0)',
|
||||
},
|
||||
{
|
||||
autoAlpha: 1,
|
||||
clipPath: 'polygon(0 0, 100% 0, 100% 100%, 0 100%)',
|
||||
},
|
||||
'>-0.5',
|
||||
)
|
||||
.pause();
|
||||
target.anim = tlImageShow.play().reversed(true);
|
||||
target.addEventListener('mouseenter', animateImg);
|
||||
target.addEventListener('mouseleave', animateImg);
|
||||
target.addEventListener('mousemove', (e) => {
|
||||
let xpos = e.offsetX;
|
||||
let ypos = e.offsetY;
|
||||
const tlImageShow = gsap.timeline();
|
||||
tlImageShow.to(image, { x: xpos, y: ypos });
|
||||
});
|
||||
});
|
||||
function animateImg() {
|
||||
this.anim.reversed(!this.anim.reversed());
|
||||
}
|
||||
ScrollTrigger.refresh();
|
||||
//growup-image
|
||||
var imageZoomIn = $('.img-zoom-in');
|
||||
if (imageZoomIn.length > 0) {
|
||||
gsap.from(imageZoomIn, 2, {
|
||||
scale: 0,
|
||||
ease: 'power3.inOut',
|
||||
delay: 0,
|
||||
});
|
||||
}
|
||||
//image mark
|
||||
var imageMark = $('.image-mark');
|
||||
if (imageMark.length > 0) {
|
||||
gsap.from(imageMark, 2, {
|
||||
width: '100%',
|
||||
ease: 'power3.inOut',
|
||||
delay: 0.5,
|
||||
});
|
||||
}
|
||||
//image mark
|
||||
if (!isMobile) {
|
||||
let imageMarkScroll = document.querySelectorAll('.image-mark-scroll');
|
||||
imageMarkScroll.forEach((imageMarkScroll) => {
|
||||
gsap.to(imageMarkScroll, {
|
||||
width: 0,
|
||||
ease: 'power3.inOut',
|
||||
duration: 1,
|
||||
scrollTrigger: {
|
||||
trigger: imageMarkScroll,
|
||||
start: 'top 90%',
|
||||
},
|
||||
});
|
||||
});
|
||||
} else {
|
||||
$('.image-mark-scroll').remove();
|
||||
}
|
||||
$('.text-opacity').each(function () {
|
||||
var words = $(this).text().split(' ');
|
||||
var total = words.length;
|
||||
$(this).empty();
|
||||
for (index = 0; index < total; index++) {
|
||||
$(this).append($('<span /> ').text(words[index] + ' '));
|
||||
}
|
||||
});
|
||||
var TextOpacity = gsap.utils.toArray('.text-opacity');
|
||||
TextOpacity.forEach(function (TextOpacity) {
|
||||
var spanOpacity = TextOpacity.querySelectorAll('span');
|
||||
gsap.to(spanOpacity, {
|
||||
scrollTrigger: {
|
||||
trigger: TextOpacity,
|
||||
start: 'top 85%',
|
||||
end: () => `+=${TextOpacity.offsetHeight}`,
|
||||
scrub: 1,
|
||||
},
|
||||
duration: 1,
|
||||
opacity: 1,
|
||||
stagger: 0.5,
|
||||
ease: Linear.easeNone,
|
||||
});
|
||||
});
|
||||
//Horizontal Scroll
|
||||
if (!isMobile) {
|
||||
let horizontalItem = document.querySelectorAll('.horizontal-item');
|
||||
let sectionsRail = document.querySelectorAll('.horizontal-rail');
|
||||
sectionsRail.forEach((sectionsRail) => {
|
||||
gsap.to(sectionsRail, {
|
||||
xPercent: -100 * (horizontalItem.length - 1),
|
||||
ease: 'none',
|
||||
scrollTrigger: {
|
||||
trigger: '.horizontal-wrap',
|
||||
pin: '.horizontal-wrap',
|
||||
scrub: true,
|
||||
start: 'top top',
|
||||
end: () => `+=${sectionsRail.offsetWidth}`,
|
||||
},
|
||||
});
|
||||
});
|
||||
}
|
||||
//END
|
||||
})(jQuery);
|
10
assets/js/vendors/gsap.min.js
vendored
Normal file
10
assets/js/vendors/gsap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
7
assets/js/vendors/headhesive.min.js
vendored
Normal file
7
assets/js/vendors/headhesive.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*!
|
||||
* Headhesive.js v1.2.3 - An on-demand sticky header
|
||||
* Author: Copyright (c) Mark Goodyear <@markgdyr> <http://markgoodyear.com>
|
||||
* Url: http://markgoodyear.com/labs/headhesive
|
||||
* License: MIT
|
||||
*/
|
||||
!function(t,e){"function"==typeof define&&define.amd?define([],function(){return e()}):"object"==typeof exports?module.exports=e():t.Headhesive=e()}(this,function(){"use strict";var t=function(e,s){for(var o in s)s.hasOwnProperty(o)&&(e[o]="object"==typeof s[o]?t(e[o],s[o]):s[o]);return e},e=function(t,e){var s,o,i,n=Date.now||function(){return(new Date).getTime()},l=null,c=0,r=function(){c=n(),l=null,i=t.apply(s,o),s=o=null};return function(){var f=n(),h=e-(f-c);return s=this,o=arguments,0>=h?(clearTimeout(l),l=null,c=f,i=t.apply(s,o),s=o=null):l||(l=setTimeout(r,h)),i}},s=function(){return void 0!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop},o=function(t,e){for(var s=0,o=t.offsetHeight;t;)s+=t.offsetTop,t=t.offsetParent;return"bottom"===e&&(s+=o),s},i=function(e,s){"querySelector"in document&&"addEventListener"in window&&(this.visible=!1,this.options={offset:300,offsetSide:"top",classes:{clone:"headhesive",stick:"headhesive--stick",unstick:"headhesive--unstick"},throttle:250,onInit:function(){},onStick:function(){},onUnstick:function(){},onDestroy:function(){}},this.elem="string"==typeof e?document.querySelector(e):e,this.options=t(this.options,s),this.init())};return i.prototype={constructor:i,init:function(){if(this.clonedElem=this.elem.cloneNode(!0),this.clonedElem.className+=" "+this.options.classes.clone,document.body.insertBefore(this.clonedElem,document.body.firstChild),"number"==typeof this.options.offset)this.scrollOffset=this.options.offset;else{if("string"!=typeof this.options.offset)throw new Error("Invalid offset: "+this.options.offset);this._setScrollOffset()}this._throttleUpdate=e(this.update.bind(this),this.options.throttle),this._throttleScrollOffset=e(this._setScrollOffset.bind(this),this.options.throttle),window.addEventListener("scroll",this._throttleUpdate,!1),window.addEventListener("resize",this._throttleScrollOffset,!1),this.options.onInit.call(this)},_setScrollOffset:function(){"string"==typeof this.options.offset&&(this.scrollOffset=o(document.querySelector(this.options.offset),this.options.offsetSide))},destroy:function(){document.body.removeChild(this.clonedElem),window.removeEventListener("scroll",this._throttleUpdate),window.removeEventListener("resize",this._throttleScrollOffset),this.options.onDestroy.call(this)},stick:function(){this.visible||(this.clonedElem.className=this.clonedElem.className.replace(new RegExp("(^|\\s)*"+this.options.classes.unstick+"(\\s|$)*","g"),""),this.clonedElem.className+=" "+this.options.classes.stick,this.visible=!0,this.options.onStick.call(this))},unstick:function(){this.visible&&(this.clonedElem.className=this.clonedElem.className.replace(new RegExp("(^|\\s)*"+this.options.classes.stick+"(\\s|$)*","g"),""),this.clonedElem.className+=" "+this.options.classes.unstick,this.visible=!1,this.options.onUnstick.call(this))},update:function(){s()>this.scrollOffset?this.stick():this.unstick()}},i});
|
1
assets/js/vendors/imagesloaded.pkgd.min.js
vendored
Normal file
1
assets/js/vendors/imagesloaded.pkgd.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
12
assets/js/vendors/isotope.pkgd.min.js
vendored
Normal file
12
assets/js/vendors/isotope.pkgd.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
assets/js/vendors/jquery-3.7.1.min.js
vendored
Normal file
2
assets/js/vendors/jquery-3.7.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
152
assets/js/vendors/jquery.appear.js
vendored
Normal file
152
assets/js/vendors/jquery.appear.js
vendored
Normal file
@@ -0,0 +1,152 @@
|
||||
|
||||
/*
|
||||
* jQuery.appear
|
||||
* https://github.com/bas2k/jquery.appear/
|
||||
* http://code.google.com/p/jquery-appear/
|
||||
* http://bas2k.ru/
|
||||
*
|
||||
* Copyright (c) 2009 Michael Hixson
|
||||
* Copyright (c) 2012-2014 Alexander Brovikov
|
||||
* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
|
||||
*/
|
||||
(function ($) {
|
||||
$.fn.appear = function (fn, options) {
|
||||
|
||||
var settings = $.extend({
|
||||
|
||||
//arbitrary data to pass to fn
|
||||
data: undefined,
|
||||
|
||||
//call fn only on the first appear?
|
||||
one: true,
|
||||
|
||||
// X & Y accuracy
|
||||
accX: 0,
|
||||
accY: 0
|
||||
|
||||
}, options);
|
||||
|
||||
return this.each(function () {
|
||||
|
||||
var t = $(this);
|
||||
|
||||
//whether the element is currently visible
|
||||
t.appeared = false;
|
||||
|
||||
if (!fn) {
|
||||
|
||||
//trigger the custom event
|
||||
t.trigger('appear', settings.data);
|
||||
return;
|
||||
}
|
||||
|
||||
var w = $(window);
|
||||
|
||||
//fires the appear event when appropriate
|
||||
var check = function () {
|
||||
|
||||
//is the element hidden?
|
||||
if (!t.is(':visible')) {
|
||||
|
||||
//it became hidden
|
||||
t.appeared = false;
|
||||
return;
|
||||
}
|
||||
|
||||
//is the element inside the visible window?
|
||||
var a = w.scrollLeft();
|
||||
var b = w.scrollTop();
|
||||
var o = t.offset();
|
||||
var x = o.left;
|
||||
var y = o.top;
|
||||
|
||||
var ax = settings.accX;
|
||||
var ay = settings.accY;
|
||||
var th = t.height();
|
||||
var wh = w.height();
|
||||
var tw = t.width();
|
||||
var ww = w.width();
|
||||
|
||||
if (y + th + ay >= b &&
|
||||
y <= b + wh + ay &&
|
||||
x + tw + ax >= a &&
|
||||
x <= a + ww + ax) {
|
||||
|
||||
//trigger the custom event
|
||||
if (!t.appeared) t.trigger('appear', settings.data);
|
||||
|
||||
} else {
|
||||
|
||||
//it scrolled out of view
|
||||
t.appeared = false;
|
||||
}
|
||||
};
|
||||
|
||||
//create a modified fn with some additional logic
|
||||
var modifiedFn = function () {
|
||||
|
||||
//mark the element as visible
|
||||
t.appeared = true;
|
||||
|
||||
//is this supposed to happen only once?
|
||||
if (settings.one) {
|
||||
|
||||
//remove the check
|
||||
w.unbind('scroll', check);
|
||||
var i = $.inArray(check, $.fn.appear.checks);
|
||||
if (i >= 0) $.fn.appear.checks.splice(i, 1);
|
||||
}
|
||||
|
||||
//trigger the original fn
|
||||
fn.apply(this, arguments);
|
||||
};
|
||||
|
||||
//bind the modified fn to the element
|
||||
if (settings.one) t.one('appear', settings.data, modifiedFn);
|
||||
else t.bind('appear', settings.data, modifiedFn);
|
||||
|
||||
//check whenever the window scrolls
|
||||
w.scroll(check);
|
||||
|
||||
//check whenever the dom changes
|
||||
$.fn.appear.checks.push(check);
|
||||
|
||||
//check now
|
||||
(check)();
|
||||
});
|
||||
};
|
||||
|
||||
//keep a queue of appearance checks
|
||||
$.extend($.fn.appear, {
|
||||
|
||||
checks: [],
|
||||
timeout: null,
|
||||
|
||||
//process the queue
|
||||
checkAll: function () {
|
||||
var length = $.fn.appear.checks.length;
|
||||
if (length > 0) while (length--) ($.fn.appear.checks[length])();
|
||||
},
|
||||
|
||||
//check the queue asynchronously
|
||||
run: function () {
|
||||
if ($.fn.appear.timeout) clearTimeout($.fn.appear.timeout);
|
||||
$.fn.appear.timeout = setTimeout($.fn.appear.checkAll, 20);
|
||||
}
|
||||
});
|
||||
|
||||
//run checks when these methods are called
|
||||
$.each(['append', 'prepend', 'after', 'before', 'attr',
|
||||
'removeAttr', 'addClass', 'removeClass', 'toggleClass',
|
||||
'remove', 'css', 'show', 'hide'], function (i, n) {
|
||||
var old = $.fn[n];
|
||||
if (old) {
|
||||
$.fn[n] = function () {
|
||||
var r = old.apply(this, arguments);
|
||||
$.fn.appear.run();
|
||||
return r;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
})(jQuery);
|
1
assets/js/vendors/jquery.carouselTicker.min.js
vendored
Normal file
1
assets/js/vendors/jquery.carouselTicker.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
assets/js/vendors/jquery.magnific-popup.min.js
vendored
Normal file
4
assets/js/vendors/jquery.magnific-popup.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
3
assets/js/vendors/jquery.odometer.min.js
vendored
Normal file
3
assets/js/vendors/jquery.odometer.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
80
assets/js/vendors/smart-stick-nav.js
vendored
Normal file
80
assets/js/vendors/smart-stick-nav.js
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
/* -------------------------------------
|
||||
Smart sticky
|
||||
-------------------------------------- */
|
||||
(function (document, window, index) {
|
||||
'use strict';
|
||||
var elSelector = '.navbar',
|
||||
element = document.querySelector(elSelector);
|
||||
if (!element) return true;
|
||||
var elHeight = 0,
|
||||
elTop = 0,
|
||||
dHeight = 0,
|
||||
wHeight = 0,
|
||||
wScrollCurrent = 0,
|
||||
wScrollBefore = 0,
|
||||
wScrollDiff = 0;
|
||||
window.addEventListener('scroll', function () {
|
||||
elHeight = element.offsetHeight;
|
||||
dHeight = document.body.offsetHeight;
|
||||
wHeight = window.innerHeight;
|
||||
wScrollCurrent = window.pageYOffset;
|
||||
wScrollDiff = wScrollBefore - wScrollCurrent;
|
||||
elTop = parseInt(window.getComputedStyle(element).getPropertyValue('top')) + wScrollDiff;
|
||||
if (wScrollCurrent <= 0)
|
||||
// scrolled to the very top; element sticks to the top
|
||||
element.style.top = '0px';
|
||||
else if (wScrollDiff > 0)
|
||||
// scrolled up; element slides in
|
||||
element.style.top = (elTop > 0 ? 0 : elTop) + 'px';
|
||||
else if (wScrollDiff < 0) {
|
||||
// scrolled down
|
||||
if (wScrollCurrent + wHeight >= dHeight - elHeight)
|
||||
// scrolled to the very bottom; element slides in
|
||||
element.style.top = ((elTop = wScrollCurrent + wHeight - dHeight) < 0 ? elTop : 0) + 'px';
|
||||
// scrolled down; element slides out
|
||||
else element.style.top = (Math.abs(elTop) > elHeight ? -elHeight : elTop) + 'px';
|
||||
}
|
||||
wScrollBefore = wScrollCurrent;
|
||||
});
|
||||
})(document, window, 0);
|
||||
(function (document, window, index) {
|
||||
'use strict';
|
||||
var elSelector = '.navbar',
|
||||
element = document.querySelector(elSelector);
|
||||
if (!element) return true;
|
||||
var elHeight = 0,
|
||||
elTop = 0,
|
||||
dHeight = 0,
|
||||
wHeight = 0,
|
||||
wScrollCurrent = 0,
|
||||
wScrollBefore = 0,
|
||||
wScrollDiff = 0;
|
||||
window.addEventListener('scroll', function () {
|
||||
elHeight = element.offsetHeight;
|
||||
dHeight = document.body.offsetHeight;
|
||||
wHeight = window.innerHeight;
|
||||
wScrollCurrent = window.pageYOffset;
|
||||
wScrollDiff = wScrollBefore - wScrollCurrent;
|
||||
elTop = parseInt(window.getComputedStyle(element).getPropertyValue('top')) + wScrollDiff;
|
||||
if (wScrollCurrent <= 0) {
|
||||
// scrolled to the very top; element sticks to the top
|
||||
element.style.top = '0px';
|
||||
element.style.position = 'relative';
|
||||
$('.navbar').removeClass('navbar-stick');
|
||||
} else if (wScrollDiff > 0) {
|
||||
// scrolled up; element slides in
|
||||
element.style.top = (elTop > 0 ? 0 : elTop) + 'px';
|
||||
element.style.position = 'fixed';
|
||||
element.style.width = '100%';
|
||||
$('.navbar').addClass('navbar-stick');
|
||||
} else if (wScrollDiff < 0) {
|
||||
// scrolled down
|
||||
if (wScrollCurrent + wHeight >= dHeight - elHeight)
|
||||
// scrolled to the very bottom; element slides in
|
||||
element.style.top = ((elTop = wScrollCurrent + wHeight - dHeight) < 0 ? elTop : 0) + 'px';
|
||||
// scrolled down; element slides out
|
||||
else element.style.top = (Math.abs(elTop) > elHeight ? -elHeight : elTop) + 'px';
|
||||
}
|
||||
wScrollBefore = wScrollCurrent;
|
||||
});
|
||||
})(document, window, 0);
|
14
assets/js/vendors/swiper-bundle.min.js
vendored
Normal file
14
assets/js/vendors/swiper-bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
assets/js/vendors/wow.min.js
vendored
Normal file
2
assets/js/vendors/wow.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user