【问题标题】:Nav bar appearing and disappearing on scroll导航栏在滚动时出现和消失
【发布时间】:2014-04-09 14:49:54
【问题描述】:

所以我正在尝试制作一个导航栏,当您第一次加载页面时它会隐藏并在您向下滚动到第二部分时显示,我已经让它工作了,但是当您在主页部分上下滚动时,导航栏在本应远离视线时不断出现和消失。

现场演示:http://zimxtrial.ukbigbuy.com/

JS:

<script type="text/javascript">
jQuery(document).ready(function() {
var startY= jQuery('#home').position().top + jQuery('#home').outerHeight();
jQuery('#nav-container').html( jQuery('#nav').html());
jQuery(window).scroll(function () {
    if(jQuery(this).scrollTop() > startY ){
        jQuery('#nav-container').slideDown();
    }else{
        $('#nav-container').css({display: 'block'});
        jQuery('#nav-container').slideUp();
    }
});
});
</script>

CSS:

#nav-container {
    position: fixed;
    height: 50px;
    width: 100%;
    min-width: 600px;
    display: none;
}

任何帮助将不胜感激,谢谢大家。

另外,这是我第一次玩 JQuery 和 JS,所以请善待。

修复后的最终版本:

<script type="text/javascript">
$(document).ready(function() {
var startY= $('#home').position().top + $('#home').outerHeight();
var navc = $('#nav-container')
navc.html( $('#nav').html());
$(window).scroll(function () {
    if($(this).scrollTop() > startY ){
        navc.slideDown();
    }else{
        navc.slideUp();
    }
});
});
</script>

【问题讨论】:

  • 顺便说一句,您可以使用$作为快捷方式jQuery,即$(document).ready()。节省大量打字。
  • 请将您的 jQuery('#nav-container') 保存在滚动函数之外的变量中,因为每次滚动时都会强制 jQuery 重新解析所有数据:/
  • 谢谢你们,如果您查看我的原始问题,我已经添加了一个最终版本,该版本有效并且包含您的两个建议。
  • 谢谢,很高兴我知道了:D

标签: javascript jquery css navigation navbar


【解决方案1】:

因为您在每次滚动页面时都会触发的 .scroll() 函数中,因此它将进入您的 else 条件并每次都显示导航栏,因为这条线:

$('#nav-container').css({display: 'block'});

删除此行,它应该可以按预期工作。

【讨论】:

  • 这已经解决了,谢谢,这是我用JS做的第一件事,没有意识到slideDown()设置显示为阻塞,我需要坐下来做更多关于它的研究,但我对这个有一点时间限制,但肯定想在 JS 方面做得更好,几个月前我才开始使用 CSS,去年这个时候我使用表格进行布局......我来了远。
  • @TristanD27 没问题,很高兴听到您从桌子上继续前进!我强烈建议您查看jQuery API Documentation,尤其是eventseffects,并将它们放入JSFiddle,这是一个很好的工具,可以让您测试这些方法并查看它们的行为。跨度>
  • 感谢您的建议,我会毫不犹豫地浏览一下,并在 JSFiddle 上玩一玩,现在我对 div 和 CSS 很熟悉了,我认为是时候学习 JS,这样我可以做得更好网站。
【解决方案2】:

您需要检查 navBar 是否显示,并且仅在状态正确时才运行 scroll() 函数。像这样的:

    if(jQuery(this).scrollTop() > startY && $("#nav-container").css('display') == "none" ){
        jQuery('#nav-container').slideDown();
    }else if( && $("#nav-container").css('display') == "block"){
        $('#nav-container').css({display: 'block'});
        jQuery('#nav-container').slideUp();
    }

【讨论】:

  • 您不需要这样做,因为.slideUp().slideDown() 将分别将显示设置为noneblock
  • 您好,感谢您的帮助。当我尝试这样做时,我得到一个错误: }else if( && $("#nav-container").css('display') == "block"){
猜你喜欢
  • 1970-01-01
  • 2019-06-05
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
相关资源
最近更新 更多