从特定div传递时更改颜色Navigation Div

时间:2015-09-07 09:02:11

标签: javascript jquery html css

我想将导航栏切换的颜色从白色更改为黑色和/或将黑色更改为白色。

但问题是当它达到一个具有特定类别的特定div时,例如' white'或者'黑色'滚动开始时颜色会发生变化。

var stickyOffset = $(".navbar-toggle").offset();
var $contentDivs = $("section");
$(document).scroll(function() {
    $contentDivs.each(function(k) {
       var _thisOffset = $(this).offset();
       var _actPosition = _thisOffset.top - $(window).scrollTop();
       if (_actPosition < (stickyOffset.top + $('.navbar-toggle').height()/2) && _actPosition + $(this).height() - $('.navbar-toggle').height()/2 > 0) {
          $(".bar1, .bar2, .bar3, .navbar-span").removeClass("white black").addClass($(this).hasClass("white") ? "white" : "black");
       }
    });
});

现在我的jsfiddle,但它变化非常快,我不知道我做错了什么。

http://jsfiddle.net/xarlyblack/8mn4bucw/

提前谢谢! 最好, 卡尔

3 个答案:

答案 0 :(得分:1)

我不知道我是否理解你的问题,但在我看来,你的颜色标签分配存在逻辑错误,我认为它应该是这样的:

...
if (_actPosition < (stickyOffset.top + $('.navbar-toggle').height()/2) &&
    _actPosition + $(this).height() - $('.navbar-toggle').height()/2 > 0) {
          $(".bar1, .bar2, .bar3, .navbar-span").removeClass("white black")
          .addClass($(this).hasClass("white") ? "black" : "white");
}
...

here是一个更新的jsfiddle,我认为它正常工作

答案 1 :(得分:1)

正如其他人已经指出的那样,在你的jsfiddle中应该切换两个类,但是如果我理解正确的话,在初始页面加载时,如果你已经向下滚动并重新加载页面,那么类也不匹配/刷新或你来自锚链接。

要解决此问题,我建议您在文档加载后运行类开关,如下所示:

var stickyOffset = $(".navbar-toggle").offset();
var $contentDivs = $("section");
$(document).scroll(function() {
    checkcolor();
});

$(document).ready(function() {
    checkcolor();
});

function checkcolor()
{
    $contentDivs.each(function(k) {
        var _thisOffset = $(this).offset();
        var _actPosition = _thisOffset.top - $(window).scrollTop();
        if (_actPosition < (30 + $('.navbar-toggle').height()/2) && _actPosition + $(this).height() - $('.navbar-toggle').height()/2 > 0) {
            $(".bar1, .bar2, .bar3, .navbar-span").removeClass("white black").addClass($(this).hasClass("white") ? "black" : "white");
        }
    });

}

我在文档就绪时添加了函数调用,并删除了stickyOffset变量,因为在页面重新加载/刷新时,您位于站点的中间,偏移是方式。您的stickyOffset需要是固定值。我刚刚添加了默认的30 in。

在这里看一个小提琴: http://jsfiddle.net/5gcemfz0/3/

答案 2 :(得分:0)

似乎问题在于

$(".bar1, .bar2, .bar3, .navbar-span").removeClass("white black").addClass($(this).hasClass("white") ? "white" : "black");
那个地方。它说'如果$(this)有类'white'加'white',否则加'black'。应该换个地方。希望它有所帮助!