From 2d5a7f4048ddbc4050ef043af9a67296110cb922 Mon Sep 17 00:00:00 2001 From: mstfyldz Date: Mon, 4 May 2026 22:23:42 +0300 Subject: [PATCH] perf: optimize sticky header to prevent layout thrashing --- js/function.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/js/function.js b/js/function.js index c2d3c36..f2a13bd 100644 --- a/js/function.js +++ b/js/function.js @@ -11,20 +11,30 @@ /* Sticky Header */ if($('.active-sticky-header').length){ - $window.on('resize', function(){ - setHeaderHeight(); - }); + var $headerSticky = $('header .header-sticky'); + var $headerMain = $("header.main-header"); + var cachedHeight = 0; function setHeaderHeight(){ - $("header.main-header").css("height", $('header .header-sticky').outerHeight()); + cachedHeight = $headerSticky.outerHeight(); + $headerMain.css("height", cachedHeight); } - - $window.on("scroll", function() { - var fromTop = $(window).scrollTop(); + + $window.on('load resize', function(){ setHeaderHeight(); - var headerHeight = $('header .header-sticky').outerHeight() - $("header .header-sticky").toggleClass("hide", (fromTop > headerHeight + 100)); - $("header .header-sticky").toggleClass("active", (fromTop > 600)); + }); + + var ticking = false; + $window.on("scroll", function() { + if (!ticking) { + window.requestAnimationFrame(function() { + var fromTop = $window.scrollTop(); + $headerSticky.toggleClass("hide", (fromTop > cachedHeight + 100)); + $headerSticky.toggleClass("active", (fromTop > 600)); + ticking = false; + }); + ticking = true; + } }); }