当前位置:嗨网首页>书籍在线阅读

23-当发生历史事件时,更改锚

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

3.6.3 当发生历史事件时,更改锚

URI 的锚组件指示浏览器显示页面的哪个部分。锚的其他常见名字是书签组件(bookmark component)或者哈希片段(hash fragment)。锚总是以“#”符号开头,如下面代码的粗体部分所示:

figure_0102_0134.jpg 锚组件的传统用法是,开发人员使得用户能很容易地在一个很长的文档的章节之间“跳转”。比如,在网页的顶部有一个目录,所有的章节标题链向它们在文档中对应的章节。每个章节的最后可能有一个“回到顶部”的链接。博客和论坛仍然很广泛地使用这种机制。

锚组件的一个独特功能是,在它改变的时候,浏览器不会重新加载页面。锚组件是只给客户端使用的控件,它是保存应用状态的理想地方。很多单页应用都使用这个技巧。

我们把想保存在浏览器历史当中的应用状态变化称之为历史事件(history event)。因为我们认为开始或者结束聊天是历史事件(你错过了会议),可以让点击事件处理程序更改锚来表示聊天滑块的状态。可以使用uriAnchor这个jQuery插件来挑这大梁。我们来修改一下 Shell,用户点击后会更改 URI,如代码清单 3-14所示。所有更改以粗体显示。

代码清单3-14 uriAnchor jQuery 插件的用法——spa/js/spa.shell.js

figure_0102_0135.jpg figure_0103_0136.jpg 现在,当点击滑块时,我们会看到URI会改变(但只在toggleChat成功返回true时)。比如,当点击聊天滑块,它会打开然后再关闭,看到的地址如下:

figure_0103_0137.jpg 关于感叹号

示例中的URI,跟在哈希符号后的感叹号(#!),用于告诉Google 和其他搜索引擎,这个URI可被搜索索引。我们将会在第9章讲解更多关于搜索引擎的优化。

我们需要确保,当锚变化的时候,只改变应用需要改变的部分。这使得应用会快很多,当部分页面内容没必要清除和重新渲染时,避免了发生烦人的“闪烁”现象。比如,假设当Susan打开聊天滑块时,她正在查看上千名用户资料的列表清单。如果她点击了回退按钮,应用应该只关闭滑块,用户资料不应该重新渲染。

为了确定事件引起的变化是否值得支持历史功能,我们要问自己以下三个问题。

用户想把发生的变化添加为书签的愿望有多强烈?

用户想恢复到发生变化之前的页面状态的愿望有多强烈?

支持这一功能有多昂贵?

尽管使用锚接口模式来维护状态的增量成本通常较小,但也有些情形是很昂贵或者是不可能的。比如,在线购物,当用户点击回退按钮,回滚是非常困难的。在这种情形下,需要完全避免历史入口。幸运的是,uriAnchor插件支持这一功能。