You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
1.7 KiB
97 lines
1.7 KiB
(function() {
|
|
window.Router = function() {
|
|
var self = this;
|
|
|
|
self.hashList = {}; /* 路由表 */
|
|
self.index = null;
|
|
self.key = '!';
|
|
|
|
window.onhashchange = function() {
|
|
self.reload();
|
|
};
|
|
};
|
|
|
|
/**
|
|
* 添加路由,如果路由已经存在则会覆盖
|
|
* @param addr: 地址
|
|
* @param callback: 回调函数,调用回调函数的时候同时也会传入相应参数
|
|
*/
|
|
Router.prototype.add = function(addr, callback) {
|
|
var self = this;
|
|
|
|
self.hashList[addr] = callback;
|
|
};
|
|
|
|
/**
|
|
* 删除路由
|
|
* @param addr: 地址
|
|
*/
|
|
Router.prototype.remove = function(addr) {
|
|
var self = this;
|
|
|
|
delete self.hashList[addr];
|
|
};
|
|
|
|
/**
|
|
* 设置主页地址
|
|
* @param index: 主页地址
|
|
*/
|
|
Router.prototype.setIndex = function(index) {
|
|
var self = this;
|
|
|
|
self.index = index;
|
|
};
|
|
|
|
|
|
/**
|
|
* 跳转到指定地址
|
|
* @param addr: 地址值
|
|
*/
|
|
Router.prototype.go = function(addr) {
|
|
var self = this;
|
|
|
|
window.location.hash = '#' + self.key + addr;
|
|
};
|
|
|
|
/**
|
|
* 重载页面
|
|
*/
|
|
Router.prototype.reload = function() {
|
|
var self = this;
|
|
|
|
var hash = window.location.hash.replace('#' + self.key, '');
|
|
//var addr = hash.split('/')[0];
|
|
var addr = hash;
|
|
var cb = getCb(addr, self.hashList);
|
|
if(cb != false) {
|
|
var arr = hash.split('/');
|
|
arr.shift();
|
|
cb.apply(self, arr);
|
|
}
|
|
else {
|
|
self.index && self.go(self.index);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 开始路由,实际上只是为了当直接访问路由路由地址的时候能够及时调用回调
|
|
*/
|
|
Router.prototype.start = function() {
|
|
var self = this;
|
|
|
|
self.reload();
|
|
};
|
|
|
|
/**
|
|
* 获取callback
|
|
* @return false or callback
|
|
*/
|
|
function getCb(addr, hashList) {
|
|
for(var key in hashList) {
|
|
if(key == addr) {
|
|
return hashList[key]
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
})();
|
|
|