perf: optimize sticky header to prevent layout thrashing
This commit is contained in:
@@ -11,20 +11,30 @@
|
|||||||
|
|
||||||
/* Sticky Header */
|
/* Sticky Header */
|
||||||
if($('.active-sticky-header').length){
|
if($('.active-sticky-header').length){
|
||||||
$window.on('resize', function(){
|
var $headerSticky = $('header .header-sticky');
|
||||||
|
var $headerMain = $("header.main-header");
|
||||||
|
var cachedHeight = 0;
|
||||||
|
|
||||||
|
function setHeaderHeight(){
|
||||||
|
cachedHeight = $headerSticky.outerHeight();
|
||||||
|
$headerMain.css("height", cachedHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
$window.on('load resize', function(){
|
||||||
setHeaderHeight();
|
setHeaderHeight();
|
||||||
});
|
});
|
||||||
|
|
||||||
function setHeaderHeight(){
|
var ticking = false;
|
||||||
$("header.main-header").css("height", $('header .header-sticky').outerHeight());
|
|
||||||
}
|
|
||||||
|
|
||||||
$window.on("scroll", function() {
|
$window.on("scroll", function() {
|
||||||
var fromTop = $(window).scrollTop();
|
if (!ticking) {
|
||||||
setHeaderHeight();
|
window.requestAnimationFrame(function() {
|
||||||
var headerHeight = $('header .header-sticky').outerHeight()
|
var fromTop = $window.scrollTop();
|
||||||
$("header .header-sticky").toggleClass("hide", (fromTop > headerHeight + 100));
|
$headerSticky.toggleClass("hide", (fromTop > cachedHeight + 100));
|
||||||
$("header .header-sticky").toggleClass("active", (fromTop > 600));
|
$headerSticky.toggleClass("active", (fromTop > 600));
|
||||||
|
ticking = false;
|
||||||
|
});
|
||||||
|
ticking = true;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user