Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css 可更改背景颜色的固定位置菜单_Css_Css Position_Jquery Waypoints - Fatal编程技术网

Css 可更改背景颜色的固定位置菜单

Css 可更改背景颜色的固定位置菜单,css,css-position,jquery-waypoints,Css,Css Position,Jquery Waypoints,我继承了一个项目,对如何解决某个特定问题有一些疑问 有一个固定的左副导航,如下所示。当用户滚动时,有6-10个不同的垂直堆叠的“部分”。顶部有一个背景图像(如下所示),而其余部分在白色和各种颜色之间交替,例如: section 1: background-image section 2: background-color: white section 3: background-color: blue section 4: background-color: white section 5: b

我继承了一个项目,对如何解决某个特定问题有一些疑问

有一个固定的左副导航,如下所示。当用户滚动时,有6-10个不同的垂直堆叠的“部分”。顶部有一个背景图像(如下所示),而其余部分在白色和各种颜色之间交替,例如:

section 1: background-image
section 2: background-color: white
section 3: background-color: blue
section 4: background-color: white
section 5: background-color: green
... etc
客户希望菜单项根据每个项目在给定时间结束的背景更改颜色(因此,当您滚动时,它会逐项更改)。如图所示,当我从标题滚动到第一个内容部分时,我将移动到白色背景,因此我的菜单是白色背景上的白色文本(第五个菜单项将移动到白色背景)

当一个特定的div滚动到一个特定的位置时,从事这项工作的人最初使用jquery航路点触发对菜单项颜色的全面更改。这基本上是可行的——但只有当整个部分滚动到菜单顶部时(意味着菜单项在最后一个菜单项滚动到该部分之前是白色的)

你有没有想过如何处理这件事

[编辑以添加]

我想我在上面已经说得很清楚了。我们已经在使用jquery航路点了。问题是,除非我在每个菜单项的每个偏移处(每个页面都不同)为区段div创建一个处理程序,否则无法在每个菜单项上触发航路点(主要是因为菜单项不是内容节点祖先树的一部分,这禁止我在上下文中传递给航路点处理程序)。这将导致大量航路点处理程序被绑定,我认为这并不理想


我所描述的。滚动时,菜单项会一次全部更改。当您从标题向下滚动到第一个内容部分时,您可以看到这是一个问题。菜单项是白色的。第一部分内容的背景也是如此。因此,在到达航路点之前,菜单实际上是隐藏的。我想做的是改变每个菜单项的颜色,因为它“进入”或“退出”一个特定的内容分区。我想我可以在window.scroll上这样做,但这似乎相当昂贵。我希望我在航路点上遗漏了什么,或者有更好的方法

嗯,在页面上设置一些ID并将其用作何时触发背景更改的锚定并不太困难

假设您有这样一个HTML结构:

<header>
  ...
</header>
<div id="getting-started" data-background-color="lightBlue">
...
</div>
<div id="afford" data-background-color="red">
...
</div>
<div id="down-payment" data-background-color="green">
...
</div>
<div id="financing" data-background-color="blue">
...
</div>

...
...
...
...
...
现在你包括


(函数($){
$(“#入门”).waypoint(函数(){
var$this=$(this);
$('header').css('background-color'),$this.data('background-color');
});
})(jQuery)
请记住,这不是一个完整的解决方案,只是帮助你朝着正确的方向前进。

好吧,我就是这么做的。考虑到我每页有6-10个菜单项(所以有6-10个部分),我真的不喜欢创建36-100个事件处理程序的解决方案,所以我希望有人有一个更好的(尽管我开始怀疑它)

所以他告诉我需要发布代码,所以这里是:

HTML


请参阅在每个元素上设置
$.waypoint()
函数,然后根据元素所在的位置添加/删除类。这些类应该具有更改背景颜色的CSS。如果你发布更多的代码,这会很有帮助。如果你阅读我的帖子,你会看到他们已经在使用航路点来实现这一点。问题不是如何使用航路点。航路点不符合我的要求,我建议发布一些代码。很难理解你想要完成什么,我不是这里唯一一个困惑的人。是的,我现在正在创建一个小提琴。正如我所说,完成第一阶段的人已经在用jquery waypoint做这件事了。问题是,当每个元素进入每个部分时,我需要更改文本颜色。而不是当菜单到达节时,或者当div到达菜单时。我已经尝试过使用偏移量来尝试并触发此操作,但使用航路点无法传递不属于祖先树的内容的上下文。编辑问题以包含更多上下文。如果可以安慰的话,您并没有真正创建36-100个事件处理程序。jQuery航路点将只使用一个滚动事件处理程序。您在内部创建的是36-100个缓存的整数,在(限制的)滚动处理程序中进行检查。它通常能维持数千年。我相信你已经用最好的方法回答了这个问题。这是相当令人欣慰的。Thx Caleb(ps-我想念波特兰硬核)。
<script type="text/javascript">
(function($) {
  $('#getting-started').waypoint(function() {
    var $this = $(this);
    $('header').css('background-color', $this.data('background-color'));
  });
})(jQuery)  
</script>
<div class="menu">
    <ul>
        <li>
            <a href='#header'>Header</a>
        </li>
        <li>
            <a href='#getting-started'>Getting Started</a>
        </li>
        <li>
            <a href='#zomglaserguns'>Laser Guns</a>
        </li>
        <li>
            <a href='#pewpew'>Pew Pew</a>
        </li>
    </ul>
</div>
<div id="header" data-menu-color-down='#fff' data-menu-color-up='#000'>
    Some header content
</div>
<div class="content">
    <div id="getting-started" data-menu-color-down='#000' data-menu-color-up='#fff'>
        some content
    </div>
    <div id="zomglaserguns" data-menu-color-down='#fff' data-menu-color-up='#000'>
        laser guns!
    </div>
    <div id="pewpew" data-menu-color-down='#000' data-menu-color-up='#fff'>
        pew pew!!!!
    </div>
</div>
var myObj = {
    menuOffsets: {},
    pageSections: [],
    init: function() {
        myObj.initMenuOffsets();
        myObj.initSections();
        myObj.initWaypoints();
    },
    initMenuOffsets: function() {
        $('.menu a').each(function() {
           var self = $(this),
               href = self.attr('href'),
               menuItemHeight = self.height();
            myObj.menuOffsets[href.substring(1, href.length)] = self.offset().top + self.height();
        });
        console.log(myObj.menuOffsets);
    },
    initSections: function() {
        var header = $('#header'),
            sections = $('.content > div');
        if(header.length) {
            myObj.pageSections.push('header'); 
        }
        sections.each(function() {
            var self = $(this);
            myObj.pageSections.push(self.attr('id'));   
        });
        console.log(myObj.pageSections);
    },
    initWaypoints: function() {
        var menuItemColor,
            key,
            i = 0,
            len = myObj.pageSections.length;

        for ( i; i < len; i++ ) {
            for ( key in myObj.menuOffsets ) {
                if( myObj.menuOffsets.hasOwnProperty( key ) ) {
                    (function ( key, i ) {
                        $('#' + myObj.pageSections[i]).waypoint(function(direction) {
                            var self = $(this);
                            menuItemColor = self.data('menuColor' + (direction === 'up' ? 'Up' : 'Down'));
                            $('.menu a[href="#' + key + '"]').css('color', menuItemColor);
                        }, { offset: myObj.menuOffsets[key] });
                    })(key, i);
                }
            }
        }
    }
};
myObj.init();
.menu {
    position: fixed;
    top: 40px;
    left: 10px;
    color: white;
}
.menu li {
    list-style-type: none;
}
.menu a {
    color: inherit;
    text-decoration: none;
}
.content {

}
#header {
    background: black;
    color: white;
    height: 200px;
    padding: 0 120px;
}
#zomglaserguns {
    background: green;
    color: #777;
}
.content div {
     min-height: 300px;  
    padding: 0 120px;
}