gpt4 book ai didi

javascript - 导航有一个活跃的类工作

转载 作者:行者123 更新时间:2023-11-28 15:19:12 24 4
gpt4 key购买 nike

大家好,我让我的导航栏在一页导航上工作。但是我想要它,以便当用户向下滚动页面手册时,导航类更改为应该激活的导航类,因此当他们经过该部分时,导航栏将突出显示事件部分。

当他们点击它时我可以让它工作,但不能手动滚动

Fiddle

HTML:

  <nav class="navbar navbar-default" data-spy="affix" data-offset-top="10">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a href="#a">a</a></li>
<li><a href="#b">b</a></li>
<li><a href="#c">c</a></li>
<li><a href="#d">d</a></li>
</ul>
</div>
<!--/.nav-collapse -->
</div>
</nav>

<div id="a"></div>
<div id="b"></div>
<div id="c"></div>
<div id="d"></div>

CSS:

affix {
top: 0;
width: 100%
}


.affix + .section {
margin-top: 68px;
}

.navbar {
margin-bottom: 0px;
left: 0;
top: 0;
width: 100%;
list-style: none;
height: 70px;
z-index: 1
}

.navbar-nav {
float: none;
margin: 0;
text-align: center
}

.navbar-nav>li {
float: none;
display: inline-block
}

.navbar-nav>li>a {
line-height: 38px
}

.navbar-nav>li>a.active {
background-color: #E7E7E7
}

.navbar-default .navbar-nav>li>a:hover, .navbar-default .navbar-nav>li>a:focus {
color: #333333;
background-color: #E7E7E7
}

.navbar-toggle {
background-color: #000000;
background-image: none;
border-radius: 4px;
float: right;
margin-bottom: 8px;
margin-right: 15px;
margin-top: 18px;
padding: 9px 10px;
position: relative
}

.navbar-inverse .navbar-toggle .icon-bar {
background-color: #2DCC70
}

.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {
background-color: #000000
}

.navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form {
border-color: transparent
}

#a{
height: 700px;
background-color: Red;
}

#b{
height: 700px;
background-color: blue;
}

#c{
height: 700px;
background-color: yellow;
}

#d{
height: 700px;
background-color: black;
}

JS:

$(function() {
$('ul.nav a').bind('click',function(event){
event.preventDefault();

var $anchor = $(this);

//Update active link
$('ul.nav a').removeClass('active');
$anchor.addClass('active');

//Animate scroll position
$('html, body').stop().animate({
scrollTop: $($anchor.attr('href')).offset().top
}, 1000);
});
});

最佳答案

你可以用 scrollspy 做到这一点.名为 Waypoints 的 Javascript 库是另一种可能性。

这是一个如何使用 Waypoint 的示例:

function makeNavActive($elem) {
if (typeof $elem !== "jQuery") {
$elem = $($elem);
}
$('ul.nav a').removeClass('active');
$elem.addClass('active');
}

function waypointHandler() {
var elementID = this.element.id;
makeNavActive("[href='#" + elementID + "']");
}

var waypointA = new Waypoint({
element: document.getElementById('a'),
handler: waypointHandler,
offset: 38
});

var waypointB = new Waypoint({
element: document.getElementById('b'),
handler: waypointHandler,
offset: 38
});

var waypointC = new Waypoint({
element: document.getElementById('c'),
handler: waypointHandler,
offset: 38
});

var waypointAD = new Waypoint({
element: document.getElementById('d'),
handler: waypointHandler,
offset: 38
});

Fiddle

我相信您可以创建一种更好的方式来设置航路点,但这将作为示例。

为了好玩,我还创建了一种在 vanilla JS 中实现它的方法。所以这是一个很好的轻量级 Vanilla 实现,尽管不如使用航路点灵活:

function makeNavActive($elem) {
if (typeof $elem !== "jQuery") {
$elem = $($elem);
}
$('ul.nav a').removeClass('active');
$elem.addClass('active');
}

function handleScroll(){
var scrollLevel = Math.floor(window.pageYOffset / 700);
console.log(scrollLevel);
if(scrollLevel === 0) {makeNavActive("[href='#a']")}
else if(scrollLevel === 1) {makeNavActive("[href='#b']")}
else if(scrollLevel === 2) {makeNavActive("[href='#c']")}
else if(scrollLevel === 3) {makeNavActive("[href='#d']")}
}
window.onscroll=handleScroll

Fiddle

希望对您有所帮助!祝你的元素好运。

关于javascript - 导航有一个活跃的类工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46531132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com