JQ 点击跳转固定位置和对应目录的小标题高亮

<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="base.css" />
<script type="text/javascript" src="jquery-1.10.1.min.js" ></script>
<style>
.t-container{}
.t-container h3{ line-height: 2em;}
.t-container p{ height: 200px; background-color: #808080;}
.fix-smallnav{ background: #f60; color: #fff; width: 120px; position: fixed; top: 200px; left: 0px;}
.fix-smallnav li{ padding-left: 8px; line-height: 2em;}
.fix-smallnav .fix-snav-hover{ font-weight: bold;  background-color: #0099FF;}
.fix-smallnav .fix-snav-hover:after{ content: "[在读]";}
</style>
</head>
<body>
<div style="height: 2000px;"></div>
<div class="t-container g-w" id="container">
	<h3>小标题一</h3>
	<p></p>
	<h3>小标题二</h3>
	<p></p>
	<h3>小标题三</h3>
	<p></p>
	<h3>小标题四</h3>
	<p></p>
	<h3>小标题五</h3>
	<p></p>
</div>
<div style="height: 2000px;"></div>
<ul class="fix-smallnav" id="smallnav"></ul>
<script>
$(function(){
	smallNav();
})
//点击跳转固定位置
function smallNav(){
	var subtit = $("#container h3");
	var smallnav = $("#smallnav");
	//获取文章的 h3 标签自动产生目录的小标题
	for(var i=0;i<subtit.size();i++){
		smallnav.append("<li>"+subtit.eq(i).text()+"</li>");
	}
	//点击目录的小标题跳转到对应的文章
	$("#smallnav li").click(function(){
		$('html, body').animate({  
            scrollTop: subtit.eq($(this).index()).offset().top-40
        },600); 
	});
}
//显示当前内容的目录
$(window).scroll(function(){
	var container = $("#container");
	var subtit = $("#container h3");
	var smallnav = $("#smallnav");
	var snavli = $("#smallnav li");
	var lbTop = 0;
	var winHeight = $(window).height();
	var scrollTop = $(window).scrollTop();
	var contBeginTop = subtit.eq(0).offset().top-scrollTop;
	var contEndTop = subtit.eq(0).offset().top+container.height()-scrollTop-winHeight;
	if(contBeginTop>(winHeight-300)){ //如果头部还不到内容部分 目录的小标题不高亮
		for(var i=0;i<subtit.size();i++){
			snavli.eq(i).removeClass("fix-snav-hover");
		}
	}else if((contEndTop+winHeight)<0){ //如果尾部还不到内容部分 目录的小标题不高亮
		for(var i=0;i<subtit.size();i++){
			snavli.eq(i).removeClass("fix-snav-hover");
		}
	}else{ //目录的小标题开始高亮
		for(var i=0;i<subtit.size();i++){
			if(i<subtit.size()-1){
				lbTop = subtit.eq(i+1).offset().top-scrollTop;
			}else{
				lbTop = subtit.eq(0).offset().top+container.height()-scrollTop;
			}
			if(lbTop>winHeight*0.26){
				snavli.eq(i).addClass("fix-snav-hover").siblings().removeClass("fix-snav-hover");
				break;
			}
		}
	}
}); 
</script>
</body>
</html>

  

效果图:

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值