关于锚点跳转及jQuery下相关操作与插件


Posted in Javascript onOctober 01, 2012

一、锚点跳转简介

锚点嘛,业余点的解释就是可以让页面定位到某个位置的点。在高度较高的页面中经常见到,例如,百度百科页面,《火影忍者》这个词条,结果就会看到如下的锚点列表:

关于锚点跳转及jQuery下相关操作与插件

点击其中一个链接,就会跳转到页面的相应位置。这就是锚点的作用之一。锚点还可以用在跳转到其他页面的相应位置,例如我的博客,点击博客首页文章下面的评论链接,则会跳转到文章的评论处。

关于锚点跳转及jQuery下相关操作与插件

起关键作用的就是链接地址后面跟着的#comments,见下图标示:

关于锚点跳转及jQuery下相关操作与插件

我知道的实现锚点跳转有两种方式,一种是a标签+name属性,还有一种就是使用标签的id属性。百度百科就是使用的a标签的name属性实现锚点跳转的,见下图:

关于锚点跳转及jQuery下相关操作与插件

上图效果更具体点表示是:

<a href="#2">作者介绍></a> <a name="2"></a>

早在大学跟某女交往的那会儿,我就已经放弃使用a+name的锚点方法了。一是使用了一个空标签,有铺张浪费,挪用公款之嫌;二是经常会出现锚点失效的情况。所以,我都是使用id来绑定锚点的,迄今为止,没有出过什么纰漏。如果使用id实现,则上图所示效果对应代码应该类似下面:

<a href="#2">作者介绍></a> <h2 id="2">作者介绍</h2>

说明:本文下面所有锚点内容专指id锚点。

本文作者:张鑫旭,欢迎访问我的个人网站。
二、含锚点跳转的URL地址

1. 关于”#”
在页面制作中,”#”这个符号相当常见,且具有一定的通用性。基本上,其表示的含义是id选择符。例如在CSS中#header{}就表示id为header标签的样式如何如何;在jQuery中,$(“#header”)表示选择id为header的标签为jQuery对象;同样的,在页面的URL中,”#”也可以理解为id选择符之意,也就是页面跳转到含URL指向的id的标签处。

例如,我们在浏览器地址栏中输入或是复制如下URL:http://www.zhangxinxu.com/study/201007/anchor-jump-test-1-demo.html#0
由于URL地址末尾带有”#”标识符,这就相当于告诉浏览器:“哥,小妹要跳了,你要接好我哦!关于锚点跳转及jQuery下相关操作与插件”。由于”#”后面跟着的是0,所以呢,浏览器就会在地址为http://www.zhangxinxu.com/study/201007/anchor-jump-test-1-demo.html的页面上寻找符合”#0″特点的标签,并执行跳转。在此页面上,有个js动态创建的渐变背景,从上到下有256个标签,id从0~255,我们看下firebug下的html代码展示。

关于锚点跳转及jQuery下相关操作与插件

所以,这个页面载入后,应该立即跳转到渐变背景的顶部。如下图所示:

关于锚点跳转及jQuery下相关操作与插件

您可以狠狠地点击这里:“#0″锚点的跳转测试

2. 关于空锚点指向
如果URL中”#”后面跟随的字符id在文中找不到,那么会如何呢?如果是在当前页面,则页面没有跳转,唯一变化的就是URL地址;如果是从其他页面跳转过来,则页面顶部显示,”#”基本上就是聋子的耳朵——摆设。

您可以狠狠地点击这里:空锚点页面跳转测试,这里的锚点标示是”#aaa”,但是由于页面上没有id为”aaa”的标签或是name为”aaa”的a标签,所以,”#aaa”纯粹就是个打酱油的。

再如果,页面的URL后面只有一个孤单的”#”,或是页面某链接指向单单是个”#”(<a href=”#”></a>),则页面顶部显示。所以,一般页面的回到顶部效果都是使用一个孤单的”#”作为锚点链接的。例如淘宝网的返回首页:

关于锚点跳转及jQuery下相关操作与插件

对应的html代码如下图所示:

关于锚点跳转及jQuery下相关操作与插件

三、jQuery下锚点的平滑跳转

对于锚点的平滑跳转,我觉得要谨慎使用,在个人站点或是这个效果含有功能提示可以用一用,在一般的商业性质的网站上,权衡来讲,不用更好,当然,这只是我的个人意见。jQuery库已经为我们做了很多的工作了,所以,在jQuery下实现锚点的平滑跳转是简单轻松的。例如,我们要让页面平滑滚动到一个id为box的元素处,则jQuery代码只要一句话,如下:

$("html,body").animate({scrollTop: $("#box").offset().top}, 1000);

其中animate为jQuery自定义动画方法,$(“#box”).offset().top表示id为box的jQuery对象距离页面顶部的偏移值,1000表示平滑动画执行的时间为1000毫秒,也就是1秒。

为了直观的表示效果,我做个个简单的demo页面。您可以狠狠地点击这里:锚点平滑跳转demo

点击下图所示文字链接,就可以看到平滑跳转效果了:

关于锚点跳转及jQuery下相关操作与插件

相应的代码如下:

HTML部分<div id="top" class="append_box mb20"> 平滑跳转到底部:<a href="#bottom" class="smooth">滑到底部</a></div><div id="appendBox" class="append_box"> <img width="300" height="3281" src="http://ss4.sinaimg.cn/bmiddle/6200b7a8t8b6743480673&690" /></div><div id="bottom" class="append_box mb20"> 平滑回到顶部:<a href="#top" class="smooth">回到顶部链接</a></div>
JS部分$(".smooth").click(function(){ var href = $(this).attr("href"); var pos = $(href).offset().top; $("html,body").animate({scrollTop: pos}, 1000); return false;});
四、IE下锚点刷新失效及jQuery下的解决

1、关于锚点刷新失效
所谓“锚点刷新失效”指的是当我们再次刷新页面(F5)的时候,即使此时的URL后面就随锚点,此锚点也是不起作用的。

还是拿最开始的例子演示,,我们在浏览器地址栏中输入或是复制如下URL:http://www.zhangxinxu.com/study/201007/anchor-jump-test-1-demo.html#0,或是点击这里。我们第一次进入这个页面的时候,锚点是正常的,页面定位到渐变背景的顶端。ok,现在,我们把页面滚动到顶部,如下图所示:

关于锚点跳转及jQuery下相关操作与插件

此时,我们再按下浏览器刷新按钮(或是F5),可以看到在IE浏览器下,页面依旧顶部显示,也就是说页面的锚点(#0)不再起作用了。大多数情况下,可能对我们的影响不是很大,但是有时候,例如我们在论坛里发布了一个帖子,发帖页面和帖子列表页面是同一页面,帖子提交后,我们想把页面定位到刚发的帖子处,在IE浏览器下就无法通过修改URL加锚点的方式实现。

如果让IE浏览器即使是同一URL刷新也能实现锚点定位呢?在jQuery下,不难实现。我们可以根据URL获取锚点,从而进一步获得对应的锚点对象,然后再让页面的滚动高度为其距离页面顶部的偏移值就可以了。文字叙述再精彩也不及实例来的直观,例如我们要处理一个链接地址为:http://www.zhangxinxu.com/study/201007/anchor-jump-test-3-demo.html#0的页面,要让其无论是重新载入还是当前页面刷新,其后面的锚点地址”#0″都要起作用。

其js代码如下,(与页面内容无关)

$(function(){ var url = window.location.toString(); var id = url.split("#")[1]; if(id){ var t = $("#"+id).offset().top; $(window).scrollTop(t); }});

您可以狠狠地点击这里:IE浏览器下刷新锚点失效修复demo

五、jQuery任意标签锚点跳转插件

上面所有提到锚点跳转的发起要不是页面的载入,要不就是a标签通过链接发起。其实我们可以点击任意标签实现锚点的跳转的。所以,我就特别写了个简单的jQuery插件,以实现任意标签页面任意位置的锚点跳转(可平滑)。

demo及下载

您可以狠狠地点击这里:任意标签锚点跳转demo

您可以狠狠地点击这里:jquery.anchor.1.0.js 1015字节 [右键-目标|链接另存为]

点击demo的文字链接或是按钮,均有跳转效果。
关于锚点跳转及jQuery下相关操作与插件

参数

参数 默认 解释ieFreshFixtrue布尔型,默认修复IE下刷新锚点不起作用的问题anchorSmoothtrue布尔型,默认平滑跳转anchortaganchor字符串,用以绑定id的标签属性,默认是"anchor",属于自定义属性animateTime1000整数,动画执行的时间,如果anchorSmooth为false,则此参数无效

插件使用

此插件的方法为:zxxAnchor()。
插件插件要想使用,需要对触发锚点跳转的标签进行一些设置。在默认情况下,要给标签添加一个自定义的属性anchor,例如:

<button id="btnTop" type="button" anchor="top">点击我吧</button>

这里的按钮就添加了一个自定义的anchor属性,属性值是”top”,表示的意思就是页面跳转到id为top的元素处。此时直接调用zxxAnchor方法就可以了,如下代码:

$("#btnTop").zxxAnchor();

当然,我们可以不使用默认的anchor标签,例如我们可以使用a标签的href属性,只要在绑定zxxAnchor方法时修改下参数就可以了,例如:

<a href="#bottom" class="smooth">滑到底部</a>

对于的jQuery代码如下:

$(".smooth").zxxAnchor({ anchortag: "href"});

对照上面的参数表可知,上面的代码是设置绑定锚点对象的属性由默认的”anchor”改为了”href”。

基本使用就是如此,其他一些参数您可以参见上面的参数表,这里不多说了。

插件优点

支持任意标签,任意位置的锚点跳转,支持平滑效果。同时不改变页面的URL地址。

六、结语

时间仓促,资历有限,若有有表述错误,欢迎指正。就这些。希望能对有需要的人提供一些帮助。

Javascript 相关文章推荐
js中将多个语句写成一个语句的两种方法小结
Dec 08 Javascript
intro.js 页面引导简单用法 分享
Aug 06 Javascript
javascript实现日期按月份加减
May 15 Javascript
原生js获取元素样式的简单方法
Aug 06 Javascript
jQuery根据ID、CLASS、等获取对象的实例
Dec 04 Javascript
bootstrap按钮插件(Button)使用方法解析
Jan 13 Javascript
jQuery.Ajax()的data参数类型详解
Jul 23 jQuery
js实现通过开始结束控制的计时器
Feb 25 Javascript
深入解析koa之异步回调处理
Jun 17 Javascript
vue实现短信验证码输入框
Apr 17 Javascript
vue界面发送表情的实现代码
Sep 11 Javascript
Vue路由权限控制解析
Nov 09 Javascript
仿新浪微博返回顶部的jquery实现代码
Oct 01 #Javascript
页面回到顶部的三种实现(锚标记,js)
Oct 01 #Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
Sep 30 #Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
Sep 30 #Javascript
js 手机号码合法性验证代码集合
Sep 29 #Javascript
JavaScript模板入门介绍
Sep 26 #Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
Sep 26 #Javascript
You might like
php实现两个数组相加的方法
2015/02/17 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
js模拟类继承小例子
2010/07/17 Javascript
网易JS面试题与Javascript词法作用域说明
2010/11/09 Javascript
JavaScript中的isXX系列是否继续使用的分析
2011/04/16 Javascript
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
2013/01/11 Javascript
Js 冒泡事件阻止实现代码
2013/01/27 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
python修改操作系统时间的方法
2015/05/18 Python
Python延时操作实现方法示例
2018/08/14 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
python super函数使用方法详解
2020/02/14 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
一套C#面试题
2013/10/09 面试题
化工机械应届生求职信
2013/11/04 职场文书
关于打架的检讨书
2014/01/17 职场文书
施工安全协议书范本
2014/09/26 职场文书
团员个人年度总结
2015/02/26 职场文书
收入证明怎么写
2015/06/12 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
golang操作rocketmq的示例代码
2022/04/06 Golang
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android