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 相关文章推荐
javascript面向对象之Javascript 继承
May 04 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
Jan 17 Javascript
angularjs学习笔记之完整的项目结构
Sep 26 Javascript
js简单时间比较的方法
Aug 02 Javascript
JavaScript数组和对象的复制
Mar 21 Javascript
简单实现js点击展开二级菜单功能
May 16 Javascript
详解如何使用webpack打包Vue工程
May 27 Javascript
JavaScript之排序函数_动力节点Java学院整理
Jun 30 Javascript
JavaScript实现图片切换效果
Aug 12 Javascript
JS设计模式之策略模式概念与用法分析
Feb 05 Javascript
性能优化篇之Webpack构建速度优化的建议
Apr 03 Javascript
vue中利用Promise封装jsonp并调取数据
Jun 18 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写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
PHP经典面试题集锦
2015/03/19 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
Laravel+Intervention实现上传图片功能示例
2019/07/09 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
Jquery.addClass始终无效原因分析
2013/09/08 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
input框中的name和id的区别
2016/11/16 Javascript
vue-star评星组件开发实例
2018/03/01 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
js实现验证码功能
2020/07/24 Javascript
基于vue.js仿淘宝收货地址并设置默认地址的案例分析
2020/08/20 Javascript
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
Python实现自动访问网页的例子
2020/02/21 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
高性能装备提升营地:Kammok
2019/02/27 全球购物
农田水利实习自我鉴定
2013/09/19 职场文书
小学语文教学反思
2014/02/10 职场文书
迟到检讨书300字
2014/02/14 职场文书
业务内勤岗位职责
2014/04/30 职场文书
导师推荐信范文
2014/05/09 职场文书
学生自我评语
2015/01/04 职场文书
2015年度房地产工作总结
2015/04/09 职场文书
党员违纪检讨书
2015/05/05 职场文书
鸦片战争观后感
2015/06/09 职场文书