【问题标题】:Sticky Navbar change text/bg color when scrolled to top, .addclass is not working?滚动到顶部时,粘性导航栏会更改文本/背景颜色,.addclass 不起作用?
【发布时间】:2015-03-31 06:06:48
【问题描述】:

我对 jQuery 完全陌生,所以请多多包涵。所以我想要对我的网站做的是在用户向下滚动时让导航栏“粘在顶部”。那已经在起作用了。

但是,我想完成更多的事情。我希望导航栏在“粘性”时改变颜色并占据容器的整个宽度。

不知何故,我无法让它与 .addClass 一起使用。我尝试了很多事情,例如删除“。”上课前。我确定我做错了什么。请开导我的心!

$(function() {

var fixed_nav_scroll_top = $('.fixed_nav').offset().top;

var fixed_nav = function(){
    var scroll_top = $(window).scrollTop();
    var $ul = $('.fixed_nav ul').width()+'px';
    if (scroll_top > fixed_nav_scroll_top) {
        $('.fixed_nav').css({ 'position': 'fixed', 'left':0, 'top':0});
        $('.fixed_nav ul').css({'width':$ul, 'display':'block', 'text-align':'center'});
        $('.fixed nav ul').addClass('.full_bar ul');
    } else {
        $('.fixed_nav').css({ 'position': 'relative' });
        $('.fixed nav ul').removeClass('.full_bar ul');
    }  

};

fixed_nav();

$(window).scroll(function() {
     fixed_nav();
});

});


.fixed_nav_wrapper {
width:710px; 
margin:0 auto; 
}

.fixed_nav { 
width:100%; 
height:50px; 
margin: -5px auto 0 auto; 
background-color:transparent;
z-index:1000;
}

.fixed_nav ul { 
display:block; 
margin:0 auto; 
padding:5px;
list-style-type:none;  
}

.fixed_nav ul li { 
display:inline;
margin:0 auto; 
padding:0;
}

.fixed_nav ul li a { 
display:block; 
float:left; 
margin:0 25px 0 25px; 
padding:0 5px 0 4px; 
outline:5px solid rgba(235,235,235,1);
outline-offset:-4px;
font-size: 2rem;
color:rgba(235,235,235,1);
font-family: Inversionz, sans-serif;
letter-spacing:-0.25rem;
}

.fixed_nav ul li a:hover { 
color:rgba(255,255,255,1) !important;
-webkit-box-shadow: 0px 0px 13px 0px rgba(255, 255, 255, 1), 0px 0px  13px 0px rgba(255, 255, 255, 1);
-moz-box-shadow:    0px 0px 13px 0px rgba(255, 255, 255, 1), 0px 0px 13px 0px rgba(255, 255, 255, 1);
box-shadow:         0px 0px 13px 0px rgba(255, 255, 255, 1), 0px 0px 13px 0px rgba(255, 255, 255, 1); 
 }

/*---------*/

.full_bar { 
width:100%; 
height:50px; 
margin: -5px auto 0 auto; 
background:black !important;
z-index:1000;
}

.full_bar ul { 
display:block; 
margin:0 auto; 
padding:500px;
list-style-type:none;  
}

.full_bar ul li { 
display:inline;
margin:0 auto; 
padding:0;
}

.full_bar ul li a { 
display:block; 
float:left; 
margin:0 25px 0 25px; 
padding:0 5px 0 4px; 
outline:5px solid rgba(135,135,235,1);
outline-offset:-4px;
font-size: 2rem;
color:rgba(135,235,235,1);
font-family: Inversionz, sans-serif;
letter-spacing:-0.25rem;
}

.full_bar ul li a:hover { 
color:rgba(155,255,255,1) !important;
-webkit-box-shadow: 0px 0px 13px 0px rgba(255, 255, 255, 1), 0px 0px 13px 0px rgba(255, 255, 255, 1);
-moz-box-shadow:    0px 0px 13px 0px rgba(255, 255, 255, 1), 0px 0px 13px 0px rgba(255, 255, 255, 1);
box-shadow:         0px 0px 13px 0px rgba(255, 255, 255, 1), 0px 0px 13px 0px rgba(255, 255, 255, 1); 
 }



<div class="fixed_nav_wrapper">
    <nav class="fixed_nav">
            <ul>
                <li><a href="#" class="current">home</a></li>
                <li><a href="#">me</a></li>
                <li><a href="#">services</a></li>
                <li><a href="#">work</a></li>
                <li><a href="#">contact</a></li>
            </ul>
    </nav>
</div>

【问题讨论】:

  • 首先,您不需要包含“.”在addClass()。其次,如果我们能看到导航栏的 html 将会很有帮助,但我怀疑您添加 ul 类可能会出错。您的addClass() 应该只是addClass("full_bar"); 尝试使用开发人员工具检查它以查看实际应用的内容
  • @robobobobo 感谢您的回答,我添加了 HTML 供您查看!

标签: javascript jquery html css class


【解决方案1】:

首先addClass方法不需要“.”到位。其次,您引用的 $('.fixed nav ul') 不存在,它应该是 $('.fixed_nav ul')。我建议使用变量,但您目前的修复代码是:

var fixed_nav = function(){
    var scroll_top = $(window).scrollTop();
    var $ul = $('.fixed_nav ul').width()+'px';
    if (scroll_top > fixed_nav_scroll_top) {
        $('.fixed_nav').css({ 'position': 'fixed', 'left':0, 'top':0});
        $('.fixed_nav ul').css({'width':$ul, 'display':'block', 'text-align':'center'});
        $('.fixed_nav ul').addClass('full_bar ul');
    } else {
        $('.fixed_nav').css({ 'position': 'relative' });
        $('.fixed_nav ul').removeClass('full_bar ul');
    }  
};

【讨论】:

  • 非常感谢!这解决了大部分问题。现在唯一的事情是,当链接向上滚动时,我无法从链接中删除“大纲”(参见 CSS),因为“.fixed_nav ul”针对的是列表而不是链接。但我的“大纲”是围绕链接设计的。有什么解决方法吗?
  • 我不太明白你的意思。您是否希望链接上的轮廓仅在用户向上滚动时消失?
  • 没关系,我放弃了这个想法。但是,是的,这就是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 2017-04-30
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
相关资源
最近更新 更多