给产品经理讲技术
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

锚点与网页内跳转的实现

读者是否有过如下两种上网体验?打开一个网页之后,发现屏幕上显示的是处于网页中间的某个位置。网页滚动到中部时,我们单击“回到顶部”选项,就跳到了网页的顶部。

这是如何实现的呢?其实是依靠“锚点”这个概念。轮船的锚定义了一个位置,让船停在这里。网页中的锚点继承了这个概念,可以用“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应用。