本文实现自定义路由,主要是事件hashchange的使用,然后根据我们的业务需求封装。

首先实现一个router的类,并实例化。
function _router(config){
this.config = config ? config : {};
}
_router.prototype = {
event:function(str,callback){
var events = str.split(' ');
for (var i in events) window.addEventListener(events[i],callback,false);
},
init: function() {
this.event('load hashchange',this.refresh.bind(this));
return this;
},
refresh: function() {
this.currentUrl = location.hash.slice(1) || '/';
this.config[this.currentUrl]();
},
route: function(path,callback){
this.config[path] = callback || function(){};
}
}
function router (config){
return new _router(config).init();
}
上边唯一需要注意的是,在使用addEventListener的时候,需要注意bind函数的使用,因为我是踩了坑,这才体会到$.proxy()。
上边使用的时候可以使用两种方法进行注册,但第二种是依赖第一种的。
方法一:
var Router = router({
'/' : function(){content.style.backgroundColor = 'white';},
'/1': function(){content.style.backgroundColor = 'blue';},
'/2': function(){content.style.backgroundColor = 'green';}
})
方法二:
Router.route('/3',function(){ content.style.backgroundColor = 'yellow'; })
完整代码:
<html>
<head>
<title></title>
</head>
<body>
<ul>
<li><a href="#/1">/1: blue</a></li>
<li><a href="#/2">/2: green</a></li>
<li><a href="#/3">/3: yellow</a></li>
</ul>
<script>
var content = document.querySelector('body');
function _router(config){
this.config = config ? config : {};
}
_router.prototype = {
event:function(str,callback){
var events = str.split(' ');
for (var i in events) window.addEventListener(events[i],callback,false);
},
init: function() {
this.event('load hashchange',this.refresh.bind(this));
return this;
},
refresh: function() {
this.currentUrl = location.hash.slice(1) || '/';
this.config[this.currentUrl]();
},
route: function(path,callback){
this.config[path] = callback || function(){};
}
}
function router (config){
return new _router(config).init();
}
var Router = router({
'/' : function(){content.style.backgroundColor = 'white';},
'/1': function(){content.style.backgroundColor = 'blue';},
'/2': function(){content.style.backgroundColor = 'green';}
})
Router.route('/3',function(){
content.style.backgroundColor = 'yellow';
})
</script>
</body>
</html>
<script>
</script>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# js
# 路由
# Vue.js路由组件vue-router使用方法详解
# angular.js之路由的选择方法
# AngularJS 路由详解和简单实例
# AngularJS 路由和模板实例及路由地址简化方法(必看)
# 全面解析JavaScript的Backbone.js框架中的Router路由
# 使用AngularJS对路由进行安全性处理的方法
# JS实现简单路由器功能的方法
# Angularjs制作简单的路由功能demo
# director.js实现前端路由使用实例
# nodejs中实现路由功能
# 轻松创建nodejs服务器(4):路由
# 需要注意
# 的是
# 我是
# 两种
# 这才
# 自定义
# 可以使用
# 体会到
# 第二种
# 第一种
# 主要是
# window
# addEventListener
# false
# currentUrl
# bind
# refresh
# return
# load
# init
相关文章:
长沙企业网站制作哪家好,长沙水业集团官方网站?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
如何自定义建站之星网站的导航菜单样式?
利用JavaScript实现拖拽改变元素大小
如何通过VPS建站实现广告与增值服务盈利?
建站之星如何一键生成手机站?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
php json中文编码为null的解决办法
建站之星导航如何优化提升用户体验?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
如何在IIS7上新建站点并设置安全权限?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
如何通过服务器快速搭建网站?完整步骤解析
如何用狗爹虚拟主机快速搭建网站?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
建站主机选购指南:核心配置与性价比推荐解析
头像制作网站在线制作软件,dw网页背景图像怎么设置?
如何在香港服务器上快速搭建免备案网站?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
如何确认建站备案号应放置的具体位置?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
如何在云主机上快速搭建网站?
独立制作一个网站多少钱,建立网站需要花多少钱?
如何在IIS管理器中快速创建并配置网站?
如何快速搭建高效简练网站?
javascript中的try catch异常捕获机制用法分析
如何获取免费开源的自助建站系统源码?
Android自定义listview布局实现上拉加载下拉刷新功能
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
定制建站是什么?如何实现个性化需求?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
Swift中switch语句区间和元组模式匹配
如何快速搭建虚拟主机网站?新手必看指南
如何在云指建站中生成FTP站点?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
建站主机与服务器功能差异如何区分?
宝塔建站助手安装配置与建站模板使用全流程解析
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
*服务器网站为何频现安全漏洞?
如何构建满足综合性能需求的优质建站方案?
音响网站制作视频教程,隆霸音响官方网站?
代刷网站制作软件,别人代刷火车票靠谱吗?
深圳网站制作培训,深圳哪些招聘网站比较好?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
如何在自有机房高效搭建专业网站?
TestNG的testng.xml配置文件怎么写
*请认真填写需求信息,我们会在24小时内与您取得联系。