body {
font-size:14px;
line-height:30px;
margin:0;
line-height:30px;
color:#000;
}
.nav {
width:150px;
background:#ccc;
position:fixed;
top:0px;
}
.nav ul,.nav ul li {
width:100%;
list-style-type:none;
margin:0;
padding:0;
}
.nav ul li a {
text-decoration:none;
display:block;
color:#000;
}
.nav ul li.active {
background-color:#333;
}
.nav ul li.active a {
color:#fff;
}
.container {
width:800px;
height:500px;
margin:0px auto;
background:#ddd;
border-bottom:1px solid #ccc;
font-size:24px;
line-height:100px;
text-align:center;
}
.container.active {
color:#fff;
}
利用 scrolltop() 获取滚动条距离网页顶部滚动的距离,其实就是屏幕顶端距离文档顶端的高度。
利用 offset().top 获取元素距离文档顶端的高度。获取屏幕的高度,加上 scrolltop() ,获取到屏幕底部距离文档顶端的高度。获取元素的高度,加上 offset().top ,获取元素底部距离文档顶端的高度。当 元素距离文档顶端的高度 小于 屏幕顶端距离文档顶端的高度,就表示元素头部进入了屏幕中。
当元素底部距离文档顶端的高度 大于 屏幕底端距离文档顶端的高度,就表示元素底部进入了屏幕中。根据以上两个条件,判断元素是否有部分处于屏幕中。这样,当有多个元素同时处在屏幕中时,多个元素对应的导航会同时高亮。附赠只高亮一个菜单的js代码,注释掉高亮多个菜单部分,取消只高亮一个菜单部分js的注释即可。这部分代码解决了滚动到底部时,最后一个元素对应的的菜单不会高亮的问题。