JS:目录跟随定位效果的实现及锚点中使用name和id定位的区别。

一、目录跟随定位效果
最近在使用百度百科( http://baike.baidu.com/)的时候,发现了个不错的功能目录跟随定位。也是百度在用户体验方面做的改善。
目录跟随定位:实现的效果就是当滚动屏幕的时候,会根据滚动到相应的位置去给相应的锚点加上高亮得效果。

以下我根据百度的效果写的,原理应该差不多:根据比较【滚动条距离顶部的距离】【每个锚点距离顶部的距离】得到当前滚动条在那个锚点区间,从而高亮当前锚点对应的导航链接。

$(window).scrollTop():得到滚动条距离顶部的距离。


$(function(){
//返回顶部
$('.home').click(function(){
	$("html,body").animate({scrollTop: 0}, 1000);
	return false;
})
 
//遍历锚点
var mds = $(".maodian")
var arrMd = [];
for(var i = 0, len = mds.length;i<len;i++){
arrMd.push($(mds[i]));
}
 
function update(){
var scrollH = $(window).scrollTop();
for(var i = 0;i<len;i++){
var mdHeight = arrMd[i].offset().top;
if(mdHeight < scrollH){var j = i+1;navon(j);}
}
}
 
//高亮导航菜单
function navon(id){
	$('.main_nav h2,.main_nav h3').removeClass('on');
	$('#p'+id).addClass('on');
}
 
//绑定滚动事件
$(window).bind('scroll',update);
})

二、锚点中使用name和id定位的区别
1)name的局限性,目标元素的ID和Name都可以作为锚点,区别在于ID对于目标元素的类型是无限制的,而name则仅适用于以下元素:A, APPLET, FORM, FRAME, IFRAME, IMG, and MAP
2)大小写敏感,html本身是不区分大小写的,但是对于锚点则区别对待了。经测试在IE下不区分大小写,但是在Firefox、Chrome下均区分大小写。
3)name可以重复di不可重复,但是不管用name还是id做锚点都应该保持其唯一性,虽然经测试重复的name和id都会定位到第一个,但是应该杜绝这样的做法,可能会产生无法预料的问题。
4)id定位存在定位偏移,而name定位很准确。网上虽然有解决id定位偏移的问题,但是如果仅是单作为锚点来言还是建议大家使用name。




评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值