【问题标题】:jQuery header scroll, how to offset?jQuery标题滚动,如何抵消?
【发布时间】:2016-03-15 13:14:51
【问题描述】:

我正在考虑使用像 https://jsfiddle.net/mariusc23/s6mLJ/31/ 这样的标题滚动,所以当我向下滚动时,标题会缩回,当我向上滚动时,它会重新出现。

HTML:

<header class="nav-down">
    This is your menu.
</header>
<main>
    This is your body.
</main>
<footer>
    This is your footer.
</footer>

CSS:

body {
    padding-top: 40px;
}
header {
    background: #f5b335;
    height: 40px;
    position: fixed;
    top: 0;
    transition: top 0.2s ease-in-out;
    width: 100%;
}
.nav-up {
    top: -40px;
}
main {
   background:url( data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAPklEQVQYV2O8dOnSfwYg0NPTYwTRuAAj0QqxmYBNM1briFaIzRbi3UiRZ75uNgUHGbfvabgfsHqGaIXYPAMAD8wgC/DOrZ4AAAAASUVORK5CYII=
   ) repeat;
    height: 2000px;
}
footer { background: #ddd;}
* { color: transparent}

jQuery:

// Hide Header on on scroll down
var didScroll;
var lastScrollTop = 0;
var delta = 5;
var navbarHeight = $('header').outerHeight();

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

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

function hasScrolled() {
    var st = $(this).scrollTop();

    // Make sure they scroll more than delta
    if(Math.abs(lastScrollTop - st) <= delta)
        return;

    // If they scrolled down and are past the navbar, add class .nav-up.
    // This is necessary so you never see what is "behind" the navbar.
    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;
}

这几乎正是我所需要的,除了在我的主页顶部高约 500 像素的图像的问题。我不希望标题在图像上向上滚动,所以当它到达距离页面顶部 500 像素的位置时,我希望它缩回。

我已经玩过代码,但我无法让它做我需要的事情,有什么想法吗?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    因此,当您向下滚动时,标题永远不可见。当您向上滚动时,在图像区域的顶部和底部之间看不到标题。

    如果您根本不想在前 500 像素处显示标题,请删除 || st &lt; navbarHeight

     if (st > 500 + navbarHeight || st < navbarHeight) {
       $('header').removeClass('nav-up').addClass('nav-down');
     } else {
       $('header').removeClass('nav-down').addClass('nav-up');
     }
    

    演示

    // Hide Header on on scroll down
    var didScroll;
    var lastScrollTop = 0;
    var delta = 5;
    var navbarHeight = $('header').outerHeight();
    
    $(window).scroll(function(event) {
      didScroll = true;
    });
    
    setInterval(function() {
      if (didScroll) {
        hasScrolled();
        didScroll = false;
      }
    }, 250);
    
    function hasScrolled() {
      var st = $(this).scrollTop();
    
      // Make sure they scroll more than delta
      if (Math.abs(lastScrollTop - st) <= delta)
        return;
    
      // If they scrolled down and are past the navbar, add class .nav-up.
      // This is necessary so you never see what is "behind" the navbar.
      if (st > lastScrollTop && st > navbarHeight) {
        // Scroll Down
        $('header').removeClass('nav-down').addClass('nav-up');
      } else {
        // Scroll Up 
        if (st > 500 + navbarHeight || st < navbarHeight) {
          $('header').removeClass('nav-up').addClass('nav-down');
        } else {
          $('header').removeClass('nav-down').addClass('nav-up');
        }
      }
      lastScrollTop = st;
    }
    body {
      padding-top: 40px;
      margin: 0;
    }
    
    header {
      background: #f5b335;
      height: 40px;
      position: fixed;
      top: 0;
      transition: top 0.2s ease-in-out;
      width: 100%;
    }
    
    .nav-up {
      top: -40px;
    }
    
    main {
      background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAPklEQVQYV2O8dOnSfwYg0NPTYwTRuAAj0QqxmYBNM1briFaIzRbi3UiRZ75uNgUHGbfvabgfsHqGaIXYPAMAD8wgC/DOrZ4AAAAASUVORK5CYII=
    ) repeat;
      height: 2000px;
    }
    
    footer {
      background: #ddd;
    }
    
    * {
      color: transparent
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <header class="nav-down">
      This is your menu.
    </header>
    <main>
      <img src="" width="100%" height="500px" style="background-color:#ccc;" /> This is your body.
    </main>
    <footer>
      This is your footer.
    </footer>

    【讨论】:

    • 谢谢 NiZa,但这实际上与我正在寻找的相反。这会使标题在向下滚动时显示前 500 像素。我想要的是标题在页面向上滚动之前根本不显示,然后当我从页面顶部达到 500 像素(而不是从顶部向下 500 像素)时再次隐藏。所以基本上有一个 500 像素的“安静区域”,页面顶部没有标题。这有意义吗?
    • 好的,我明白了。当滚动位于顶部时,您甚至不想显示标题?所以前 500px 根本没有标题。
    • 就是这样,谢谢!删除 || st &lt; navbarHeight 给了我我想要的东西。在任何滚动发生之前,该栏确实出现在页面加载上,但我相信我可以弄清楚。再次感谢。
    【解决方案2】:

    也许将st &gt; navbarHeightst &gt; 500 交换?

    【讨论】:

    • 谢谢 Björn,这确实有效,但这是我对 NiZa 回复的回答 - 这使前 500 像素的标题保持在原位。
    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多