document.addEventListener("DOMContentLoaded", () => { const header = document.getElementById("header"); const footer = document.getElementById("footer"); const container = document.getElementById("container"); if (!header || !footer || !container) return; function updateLayout() { const headerHeight = header.getBoundingClientRect().height; const footerHeight = footer.getBoundingClientRect().height; const viewportHeight = window.innerHeight; // 👉 vì header fixed nên KHÔNG trừ header const minHeight = viewportHeight - footerHeight; container.style.minHeight = `${minHeight}px`; // 👉 đẩy nội dung xuống tránh bị header đè //container.style.paddingTop = `${headerHeight}px`; } // debounce resize let resizeTimeout; window.addEventListener("resize", () => { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(updateLayout, 100); }); updateLayout(); window.addEventListener("load", updateLayout); }); /***********************************************************************************/ $(document).ready(function(){ AOS.init({ duration: 1000, once: true }); Fancybox.bind('[data-fancybox=""]', { // }); Fancybox.bind('[data-fancybox="gallery"]', { // }); Fancybox.bind('[data-fancybox="ajax"]', { mainClass: 'fcb_ajax' }); if($(".click_s").length){ $(".click_s, .click_s_rwd").click(function() { $(".form_s").addClass("active"); $('body').addClass('fixbody'); }); $(".close_form_s").click(function() { $(".form_s").removeClass("active"); $('body').removeClass('fixbody'); }); } if($(".sticky").length){ var sticky = new Sticky('.sticky'); sticky.update(); } if($(".link_scroll").length){ $('.link_scroll').click(function(e) { e.preventDefault(); $('html, body').animate({ scrollTop: $('#neo_form_tuva').offset().top }, 500); }); } $(".but_bldn_res").click(function(e) { $val=$(".but_bldn_res").attr("val"); if($val==0){ $(".bl_dn").attr("style","display: flex;"); $(this).attr("val",1).addClass("active"); } else { $(".bl_dn").attr("style","display: none;"); $(this).attr("val",0).removeClass("active"); } }); $(".but_show_filter_rwd").click(function() { $(this).toggleClass("active"); $(".dm_ct_f_tt").toggleClass("active"); }); /***********************************************************************************/ if($(".img_Parallax").length){ const items = document.querySelectorAll(".img_Parallax"); let mouseX = 0; let mouseY = 0; let currentX = 0; let currentY = 0; window.addEventListener("mousemove", (e) => { mouseX = e.clientX; mouseY = e.clientY; }); function animate() { const centerX = window.innerWidth / 2; const centerY = window.innerHeight / 2; // Smooth motion currentX += (mouseX - currentX) * 0.08; currentY += (mouseY - currentY) * 0.08; items.forEach((item) => { const speed = parseFloat(item.dataset.speed) || 0.03; let x = (currentX - centerX) * speed; let y = (currentY - centerY) * speed; x = Math.max(-10, Math.min(10, x)); y = Math.max(-10, Math.min(10, y)); item.style.transform = `translate3d(${x}px, ${y}px, 0)`; }); requestAnimationFrame(animate); } animate(); } /***********************************************************************************/ if($(".swiper2").length){ const swiper2 = new Swiper('.swiper2', { watchOverflow: true, preloadImages: false, lazy: { loadPrevNext: true, }, autoplay: { delay: 2000, }, speed: 500, spaceBetween: 24, breakpoints: { 1024: { slidesPerView: 6, }, 768: { slidesPerView: 4, }, 640: { slidesPerView: 3, }, 320: { slidesPerView: 2, } } }); } if($(".swiper3").length){ const swiper3 = new Swiper('.swiper3', { watchOverflow: true, preloadImages: false, lazy: { loadPrevNext: true, }, navigation: { nextEl: '.swiper-button-next-3', prevEl: '.swiper-button-prev-3', }, slidesPerView: "auto", spaceBetween: 16, }); } if($(".gallery-thumbs3").length){ var galleryThumbs3 = new Swiper('.gallery-thumbs3', { direction: 'horizontal', spaceBetween: 8, slidesPerView: "5", watchSlidesProgress: true, watchSlidesVisibility: true, centerInsufficientSlides: true }); var galleryTop3 = new Swiper('.gallery-top3', { autoplay: { delay: 4000 }, spaceBetween: 8, slidesPerView: 1, thumbs: { swiper: galleryThumbs3 }, navigation: { nextEl: '.swiper-button-next-3-plus', prevEl: '.swiper-button-prev-3-plus', } }); } /***********************************************************************************/ $(".icon_menu_mobile").click(function(e) { $val=$(".icon_menu_mobile").attr("val"); if($val==0){ $(".menu_mobile").attr("style","visibility: visible;"); $(this).attr("val",1); $('body').addClass("show_menu_mobile"); } }); $(".close_menu_mobile").click(function() { $(".menu_mobile").removeAttr("style"); $(".icon_menu_mobile").attr("val",0); $('body').removeClass("show_menu_mobile"); }); $(".arrown_menu_accordion").click(function(){ //$(".ul_ma_1 li").removeClass("active"); $(this).parent().toggleClass('active'); }); }); /***********************************************************************************/ document.addEventListener("DOMContentLoaded", function () { const imgs = document.querySelectorAll('.sk-img[data-skeleton]'); const observer = new IntersectionObserver(entries => { entries.forEach(entry => { if (!entry.isIntersecting) return; const wrap = entry.target; const img = wrap.querySelector('img[data-src]'); if (img) { img.src = img.dataset.src; img.onload = () => { setTimeout(() => wrap.classList.add('loaded'), 100); }; img.removeAttribute('data-src'); } observer.unobserve(wrap); }); }, { rootMargin: '0px', threshold: 0 }); imgs.forEach(el => observer.observe(el)); });