javascript - 每当某个类到达窗口顶部时,尝试更改粘性标题背景

标签 javascript jquery html css

我有一个简单的粘性标题,我想在 div/class/id 到达窗口顶部时更改其背景颜色(并在向上滚动时变回原来的颜色)。不只是一次,而是多次。

粘性 header 的基本代码是这样的,https://jsfiddle.net/wzrfg2xe/1/

HTML 代码:

<div class="sticky-element-positioner">
<div class="sticky-element">
<nav class='greedy-nav'>
<ul class='visible-links'>
<li><a href='#'>Menu 1</a></li>
<li><a href='#'>Menu 2</a></li>
<li><a href='#'>Menu 3</a></li>
</ul>
</nav>
</div>
</div>

<section class="one"> blabla</section>
<section class="two"> blabla</section>
<section class="three"> blabla</section>
<section class="four"> blabla</section>
<section class="five"> blabla</section>

CSS

ul { margin: 0; }
.greedy-nav {
height: 40px;
position: relative;
min-width: 250px;
width: 100%;
background: #513e5d;
width: 100%;
text-align: center; }

.greedy-nav a {
display: block;
padding: 0 30px;
line-height: 40px;
font-size: 16px;
color: #ddd;
text-decoration: none; }

.greedy-nav a:hover { color: #fff; background: rgba(0,0,0,.1); }

.greedy-nav .visible-links { display: inline-table; }
.greedy-nav .visible-links li { display: table-cell; }
.greedy-nav .visible-links li:first-child { font-weight: bold; }
.greedy-nav .visible-links li:first-child a { color: #fff !important; }

.sticky-element,
.sticky-element-positioner {
height: 40px;
text-align: center;
width: 100%;
z-index: 5; }

.sticky-element { position: static; }

.sticky-element.sticky-element-sticky {
position: fixed;
left: 0;
top: 0;
margin: 0; }

.sticky-element-positioner { position: static; }

.one { background: green; height: 300px; }
.two { background: yellow; height: 300px; }
.three { background: red; height: 300px; }
.four { background: blue; height: 300px; }
.five { background: orange; height: 800px; }

JS

$(document).ready(function() {

var stickyElement = $('.sticky-element'),
stickyElementPositioner = $('.sticky-element-positioner');

function stickyElementFixed() {
stickyElement.addClass("sticky-element-sticky");
}

function stickyElementStatic() {
stickyElement.removeClass("sticky-element-sticky");
}

$(window).scroll(function() {
var elementTarget = (stickyElementPositioner.offset().top);
var scrollTop = $(window).scrollTop();

if (scrollTop <= elementTarget) {
stickyElementStatic();
} else {
stickyElementFixed();
}

});

});

我四处搜索并在堆栈上找到了关于它如何工作的答案,jsfiddle.net/8onnaqL7/(取自 this post )。

将它们加在一起得到这个,http://jsfiddle.net/tpuqtobo/

现在看来它完全删除了整个粘性标题样式。我尝试了多种不同的方法来使其发挥作用,但我就是无法弄清楚。

有没有办法在不使用插件的情况下实现我正在寻找的目标,您可以猜测从窗口顶部向下滚动了多远?

澄清一下,在实际设计中,粘性标题出现在标题下方,因此它从一开始就不是在顶部。

如果有另一种方法来处理粘性和背景颜色的变化,我愿意听取任何可能有效的建议。

预先感谢您的宝贵时间!

最佳答案

您的 removeClass() JS 代码正在删除所有类,包括 greedy-nav 类,这会导致您的导航中断。

您应该这样做,而不是仅仅添加 project-x 类:

$(".greedy-nav").removeClass().addClass("greedy-nav project2");

在这里工作 fiddle :http://jsfiddle.net/tpuqtobo/1/

希望这有帮助。干杯

关于javascript - 每当某个类到达窗口顶部时,尝试更改粘性标题背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43366451/

相关文章:

javascript - 需要在选项卡菜单中向下滚动时隐藏背景图像

jquery - 添加文本阴影(textShadow).css()不工作Jquery

javascript - 使用 setInterval 时如何停止等待光标

javascript - Jquery parent 不工作

javascript - Bootstrap 模态网格布局缺少填充

javascript - Gravity Forms 未在 https 下加载,未定义 jQuery

php - 开源网站

javascript - mui-datatables : Warning: Function components cannot be given refs. 尝试访问此 ref 将失败。你是想使用 React.forwardRef() 吗?

php - Chrome 的滚动延迟

JavaScript:单击按钮时无法更改 div 的背景颜色