首页 > 解决方案 > 向上滚动添加标题后滚动平滑过渡

问题描述

我正在创建一个header

这是我目前的方法。它有点工作,但不像我想要的那么顺利(因为标题刚刚出现,我希望它过渡)。我尝试添加过渡,但它不起作用?

/**********/
/* SCROLL */
/**********/

//Add transition when scrolling down
$(window).scroll(function() {    
  var scroll = $(window).scrollTop();
  if (scroll >= 25) {
      $("header").addClass("header--maroon");
  } else {
      $("header").removeClass("header--maroon");
  }
});

// add scroll effect on page refresh too
$(function() { 
  var scroll = $(window).scrollTop();
  if (scroll >= 10) {
    $(".mainMenu").addClass("header--maroon");
  } else {
    $(".mainMenu").removeClass("header--maroon");
  }
});

/******************************/
/* HIDE HEADER ON SCROLL DOWN */
/******************************/

var didScroll;
var lastScrollTop = 0;
var delta = 25;
var navbarHeight = $('header').outerHeight();

$(window).scroll(function(event){
    didScroll = true;
});

setInterval(function() {
    if (didScroll) {
        hasScrolled();
        didScroll = false;
    }
}, 250);

function hasScrolled() {
    var st = $(this).scrollTop();
    if(Math.abs(lastScrollTop - st) <= delta)
        return;

    if (st > lastScrollTop && st > navbarHeight){
        // Scroll Down
        $('header').removeClass('nav-down').addClass('nav-up');
    } else {
        // Scroll Up
        if(st + $(window).height() < $(document).height()) {
            $('header').removeClass('nav-up').addClass('nav-down');
        }
    }
    
    lastScrollTop = st;
}
body{
  background: wheat;
  height:1000px;
}

header {
  position: fixed;
  transition: top 0.2s ease-in-out;
  width: 100%;
  height: 90px;
  background: transparent;
}

.nav-up {
  top: -90px;
  transition: top 0.2s ease-in-out;
}

.header--maroon {
  background: #521717;
  transition: top 0.2s ease-in-out;
}

.mainMenu {
  background-color: transparent;
  width: 100%;
  padding: 10px 0px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<header class="nav-down">
  <div class="mainMenu">Link</div>
</header>

<div class="gap"></div>

标签: javascriptjqueryhtmlcss

解决方案


你可以使用.animate()类。

代替...

$('header').removeClass('nav-down').addClass('nav-up');

和...

$("header").animate({ top: '-90px' },300);

并更换...

$('header').removeClass('nav-up').addClass('nav-down');

和...

$("header").animate({ top: '10px' },300);

是使用您的代码的 JSFiddle 示例。

请注意,这只是一个粗略的实现。您可以使用它并对其进行调整,直到它按您的意愿工作。


推荐阅读