锚点与网页内跳转的实现
读者是否有过如下两种上网体验?打开一个网页之后,发现屏幕上显示的是处于网页中间的某个位置。网页滚动到中部时,我们单击“回到顶部”选项,就跳到了网页的顶部。
这是如何实现的呢?其实是依靠“锚点”这个概念。轮船的锚定义了一个位置,让船停在这里。网页中的锚点继承了这个概念,可以用“id=×××”这种方式定义网页中的元素位置,即简单定义了一个锚点。
我们来看如下代码:
<html>
<p>
I am line.</br>
I am 1ine.</br>
I am line.</br>
//此处省略若干行...
I am line.</br>
I am line.</br>
</p>
<a id="anchor">我是a标签</a>
</html>
此处定义 a 标签为一个名字叫作 anchor 的锚点位置,这时在浏览器里输入file:///C:/Users/Administrator.USER-20150731ZR/Desktop/index.html#anchor 这个本地地址的URL。
在该URL结尾处加上#anchor,网页打开后会直接跳转到a标签的位置,也就是“我是a标签”这一行。网页已经发生了滚动,这个URL中的#号标记网页加载之后的位置。同样,网页中也可以实现“锚点”跳转,例如下面这段代码,实现了“回到顶部”的功能:
<html>
<p>
I am line.</br>
I am line.</br>
//此处省略若干行...
I am line.</br>
</p>
<a href="#top">回到顶部</a>
</html>
这段代码用a标签的href字段指定id为top的位置,单击该标签后就可以回到顶部。除了用锚点实现,还可以用其他方式实现这个功能,比如用JavaScript:
<a href="javascript:scroll(0,0)">返回顶部</a>
由以上可知,锚点定义位置,用#号完成对锚点位置的跳转,无论是在输入的URL中还是网页中,各种位置跳转的需求都可以这样简单完成。这个锚点的跳转仅仅是浏览器的操作行为,并不会发起任何网络请求和服务器交互。
需要特别说明的是,利用锚点的特性不仅能完成这种页面位置跳转的小功能,还可以改变浏览器的访问历史。当在不同的锚点间切换时,浏览器是可以后退的,每变化一次锚点的值(也就是#后面的值)都将增加一条浏览记录。有一些单页Web应用是靠锚点来切换当前页面的,利用的就是这个特性。当然,也可以利用一个叫History API的浏览器接口实现单页Web应用。