【发布时间】:2018-04-23 16:12:18
【问题描述】:
如果导航当前悬停在具有浅色/白色背景的页面部分上以保持导航可见,我正在尝试创建一个脚本来更改导航栏的颜色。
我想改变布局如下的汉堡菜单的颜色:
<div id="nav_ham" onclick="openNav()">
<span class=""></span>
<span class=""></span>
<span class=""></span>
<span class=""></span>
</div>
要更改跨度的颜色,我想添加一个类 ham_dark,它执行以下操作:
.ham_dark { background: #000!important;}
我给白色背景一个 section_white 类并应用了以下代码:
//CHANGES COLOR OF NAV ON WHITE SECTIONS
function onScreen() {
// Check if the top of the page collides with each section
jQuery('.section_white').each(function() {
var windowScroll = jQuery(document).scrollTop();
var navHeight = jQuery('.nav').height();
// Complex line checks if windowScroll (top of page) + nav bar hits Section Top / Bottom
if( windowScroll + navHeight >= jQuery(this).offset().top && windowScroll + navHeight <= jQuery(this).offset().top + jQuery(this).height()) {
// This section is active! Add Highlight
console.log('working');
jQuery('#nav_ham span').addClass('ham_dark')
} else {
// No - Remove highlight class
jQuery('#nav_ham span').removeClass('ham_dark')
}
});
}
jQuery(window).on('scroll resize', function () {
onScreen();
});
当导航悬停在所有 section_white 类上时,控制台正在记录“工作”,但是它仅将 addClass 应用于页面上的最终 section_white 类,而忽略所有其他类。
为什么 console.log 在所有类上触发,但只将 addClass 应用于 section_white 的最终实例?
我已经对此进行了模拟,但错误仍在发生(导航在最终的section_white div 上改变颜色,但不是第一个):jsfiddle
谢谢
【问题讨论】:
-
你有多个ID为
nav_ham的元素吗? -
@Satpal - ID
nav_ham是汉堡菜单的容器,它由三个跨度组成,如下所示:<div id="nav_ham" <span class=""></span> <span class=""></span> <span class=""></span> <span class=""></span></div>- 它只使用一次。 -
给你的导航一个固定的背景,让它出现在其他内容的顶部,这样你就不需要弄乱颜色了,难道不是更容易吗?
-
@ADyson - 理论上是的,但是网站的设计要求导航没有背景颜色。
-
和我想的一样,因为你没有离开循环,所以你的课程又被删除了:jsfiddle.net/cdr26kwu/1
标签: javascript jquery class each