如何实现哈希键导航
How to implement a hash-key navigation?
我想实现一个基于Ajax的哈希键导航,如下所示:
http://www.foo.bar/#/about/
http://www.foo.bar/#/news/
http://www.foo.bar/#/products/
如何实现此结构?
使用基于哈希的导航结构,您将通过浏览器中的JS定义路由及其处理程序。。。更改哈希时,将触发"hashchange"事件,并调用"window.onhashchange"处理程序函数。*
例如
if ("onhashchange" in window) {
alert("The browser supports the hashchange event!");
}
function locationHashChanged() {
if (location.hash === "#somecoolfeature") {
somecoolfeature();
}
}
window.onhashchange = locationHashChanged;
还可以选择使用最近推出的HTML5 pushstate。
结账http://www.microjs.com/#spa对于一些好的JS路由库,其中一些提供了对HTML5 pushstate的支持,以及对旧浏览器的hashchange的回退。
如果你想构建一个严肃的应用程序,你可以使用Backbone.js来处理模型、视图、路由等。如果你不需要Backbone附带的所有额外功能,你还应该看看Crossroads.js(路由库)及其附带的Hasher.js(hashchange/pushstate库)。
或者还有LeviRoutes(仅HTML5 pushstate,非常像Node.js的Express中的路由)
或者Jquery BBQ(用于Jquery/基于hashchange/一些不错的功能——(github.com/bown/Jquery BBQ)
然后是Director(hashchange/大量功能/在Node.js和浏览器中工作/类似于Express路由/主要由Nodejitsu的人员开发)。
*注意:如果你专注于SEO,那么hashchange/ajax将引入一些问题。。。你可能想阅读一下谷歌的网站管理员指南——http://code.google.com/web/ajaxcrawling/docs/getting-started.html
**另外,除了Jquery BBQ
使用上面给出的示例,并保持简单,您可以执行以下操作:
function aboutHandler() {
//Do stuff--e.g. get via AJAX -> render template (optional) -> append HTML to an element
}
function newsHandler() {
//Do stuff
}
function productsHandler() {
//Do stuff
}
function locationHashChanged() {
(location.hash === "#/about/") && aboutHandler();
(location.hash === "#/news/") && newsHandler();
(location.hash === "#/products/") && productsHandler();
}
}
window.onhashchange = locationHashChanged;
看起来您正在开发一个单页应用程序。因此,我建议您使用Backbone.js。以下是您任务的代码片段。
<script>
var Controller = Backbone.Router.extend({
routes: {
"/about/": "about",
"/news/": "news",
"/products/": "products"
},
about: function(){
// ...
},
news: function(){
// ...
},
products: functions(){
// ...
}
});
var controller = new Controller();
Backbone.history.start();
</script>
骨干。什么是路由器?
- 在我的图库(jQuery)中使用箭头导航时,更改URL中的哈希
- 在Javascript中,如何使用对象作为哈希映射的键
- 使用Flexslider进行哈希URL导航
- 阻止哈希导航 URL
- 按值对映射/哈希进行排序,保留键
- 猫头鹰轮播2 在拖动时更新 URL 哈希导航
- 我可以比较两个Perl哈希(键和值)提取差异并应用于JavaScript中的哈希吗?
- 为什么我的 JavaScript 哈希带有保留字“toString”作为显示 NaN 的键
- 如何使用 Node.JS 在哈希表中为每个键存储多个值
- 从作为哈希映射中的键的对象中检索值
- 哈希键/值作为数组
- 带有键/值的Javascript测试哈希表
- 如何实现哈希键导航
- 从基于哈希的导航切换到HTML5历史API
- 在javascript / backbone中添加哈希键
- Coffeescript动态哈希键
- 如何在URL参数中提交哈希键?
- 如果希望使用javascript数组作为哈希键,请使用任意数组元素进行检索
- 带有粘性标头的哈希滚动导航,偏移量在 Firefox 上不起作用
- 查询dynamoDB的关键条件'GE'在哈希键上