// GSAP PlugIn gsap.registerPlugin(ScrollTrigger); // Height Resize Event function setScreenSize() { let vh = window.innerHeight * 0.01; document.documentElement.style.setProperty('--vh', `${vh}px`); window.addEventListener('resize', () => { let vh = window.innerHeight * 0.01; document.documentElement.style.setProperty('--vh', `${vh}px`); setTimeout(() => { ScrollTrigger.refresh(); }, 100); }); } setScreenSize(); // Lenis Scroll Event function lenisScroll() { const lenis = new Lenis({ duration: 2, easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)), smooth: true, }); lenis.on('scroll', ScrollTrigger.update); function raf(time) { lenis.raf(time); requestAnimationFrame(raf); } requestAnimationFrame(raf); return lenis; } function scrollOff() { let html = document.querySelector('html'); html.classList.remove('lenis'); lenis.stop(); lenis.destroy(); html.style.removeProperty('transform'); html.style.removeProperty('will-change'); requestAnimationFrame(() => { requestAnimationFrame(() => { html.classList.add('modal-open'); }); }); } function scrollOn() { let html = document.querySelector('html'); lenis = lenisScroll(); html.classList.remove('modal-open'); } let lenis = lenisScroll(); // Header Event function headerEvent(){ let html = document.querySelector('html'); let header = document.querySelector('header'); let headerMenu = document.querySelector('.h_menu'); let headerMenuLists = document.querySelectorAll('.h_menu__li'); let headerBurgerMenu = document.querySelector('.h_mobile__btn'); let windowWidth = window.innerWidth; let windowHeight = window.innerHeight; let mobileWidth = 1200; let scrollPos = 0; let stickyPos = 0; let ticking = false; let linkToggle; let timer; window.addEventListener('scroll', scroll, false); window.addEventListener('resize', resize, false); // Run Immediately (headerAnimate = function(){ windowWidth = window.innerWidth; windowHeight = window.innerHeight; scrollPos = window.scrollY || window.pageYOffset; animated(); if (windowWidth > mobileWidth) { burgerMaker(); } })(); // Animated function animated(){ sticky(); } // Sticky function sticky(){ let scrollPos = window.pageYOffset || document.documentElement.scrollTop; if(scrollPos > 0){ header.classList.add('active'); } else { header.classList.remove('active'); } stickyPos = scrollPos <= 0 ? 0 : scrollPos; } // Scroll Optimization function scroll(){ if(!ticking){ window.requestAnimationFrame(() => { call = 'scroll'; headerAnimate(call); ticking = false; }) } } // Resize Optimization function resize(){ clearTimeout(timer); timer = setTimeout(function () { timer = null; handle(); }, 66); } function handle() { call = "resize"; headerAnimate(call, windowWidth); } // Header Menu PC Event headerMenu.addEventListener('mouseover', isOver); headerMenu.addEventListener('mouseout', isOut); function isOver(){ header.setAttribute('header-hover', 'on'); } function isOut(){ header.removeAttribute('header-hover'); } headerMenuLists.forEach((list) => { list.addEventListener('mouseenter', function(){ headerMenuLists.forEach((other) => { other.classList.remove('on'); }); list.classList.add('on'); }); list.addEventListener('mouseleave', function(){ list.classList.remove('on'); }) }); // Mobile Menu Event headerBurgerMenu.addEventListener("click", function(){ burgerMaker(this); }); function hideSubMenu() { linkToggle = document.querySelectorAll('.h_menu__link'); for (let i = 0; i < linkToggle.length; i++) { linkToggle[i].setAttribute('aria-toggle', 'false'); } } function clickSubMenu() { hideSubMenu(); for (let i = 0; i < linkToggle.length; i++) { linkToggle[i].addEventListener('click', function () { if (this.getAttribute('aria-toggle') === 'true') { hideSubMenu(); } else { hideSubMenu(); this.setAttribute('aria-toggle', 'true'); } }); } } clickSubMenu(); function burgerMaker(e) { if (e === undefined || e.getAttribute('aria-pressed') === 'true') { header.setAttribute('data-header-mobile', 'off'); headerBurgerMenu.setAttribute('aria-pressed', 'false'); hideSubMenu(); html.style.overflow = ''; } else { headerBurgerMenu.setAttribute('aria-pressed', 'true'); header.setAttribute('data-header-mobile', 'on'); html.style.overflow = 'hidden'; linkToggle.forEach((link) => { link.addEventListener('click', function (e) { e.preventDefault(); }); }); } } }