js实现自定义路由


Posted in Javascript onFebruary 04, 2017

本文实现自定义路由,主要是事件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>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
SWFObject Flash js调用类
Jul 08 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
Feb 15 Javascript
JavaScript常用本地对象小结
Mar 28 Javascript
深入浅析jQuery对象$.html
Aug 22 Javascript
vue2滚动条加载更多数据实现代码
Jan 10 Javascript
微信公众号菜单配置微信小程序实例详解
Mar 31 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
May 25 jQuery
Angular4实现动态添加删除表单输入框功能
Aug 11 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
Sep 12 Javascript
微信小程序实现手指拖动选项排序
Apr 22 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
May 12 Javascript
uniapp与webview之间的相互传值的实现
Jun 29 Javascript
jQuery窗口拖动功能的实现代码
Feb 04 #Javascript
简单易懂的天气插件(代码分享)
Feb 04 #Javascript
URL中“#” “?” &amp;“”号的作用浅析
Feb 04 #Javascript
Angularjs 依赖压缩及自定义过滤器写法
Feb 04 #Javascript
javascript实现复选框全选或反选
Feb 04 #Javascript
JavaScript获取当前时间向前推三个月的方法示例
Feb 04 #Javascript
javascript表单正则应用
Feb 04 #Javascript
You might like
用PHP的ob_start() 控制您的浏览器cache
2009/08/03 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
PHP中读写文件实现代码
2011/10/20 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
cakephp常见知识点汇总
2017/02/24 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
Python基本socket通信控制操作示例
2019/01/30 Python
Python列表去重复项的N种方法(实例代码)
2020/05/12 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
汽车销售求职自荐信
2013/10/01 职场文书
信息专业本科生个人的自我评价
2013/10/28 职场文书
数据员岗位职责
2013/11/19 职场文书
法警的竞聘演讲稿
2014/01/02 职场文书
幼儿园课题方案
2014/06/09 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
设备收款委托书范本
2014/10/02 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书
导游词之张家界
2019/10/31 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python