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 SpiderMonkey中的函数序列化如何进行
Dec 05 Javascript
jquery二级导航内容均分的原理及实现
Aug 13 Javascript
jQuery动态创建html元素的常用方法汇总
Sep 05 Javascript
Node.js巧妙实现Web应用代码热更新
Oct 22 Javascript
jQuery+CSS实现简单切换菜单示例
Jul 27 Javascript
vue2.0之多页面的开发的示例
Jan 30 Javascript
webpack4 css打包压缩问题的解决
May 18 Javascript
值得收藏的八个常用的js正则表达式
Oct 19 Javascript
JavaScript实现随机五位数验证码
Sep 27 Javascript
细述Javascript的加法运算符的具体使用
Oct 18 Javascript
微信小程序swiper左右扩展各显示一半代码实例
Dec 05 Javascript
ES6使用 Array.includes 处理多重条件用法实例分析
Mar 02 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
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
下载文件的点击数回填
2006/10/09 PHP
isset和empty的区别
2007/01/15 PHP
php网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
详解WordPress开发中wp_title()函数的用法
2016/01/07 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
JavaScript 对象模型 执行模型
2009/12/06 Javascript
JavaScript 高级篇之函数 (四)
2012/04/07 Javascript
瀑布流布局并自动加载实现代码
2013/03/12 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
老生常谈JavaScript数组的用法
2016/06/10 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
vue实现绑定事件的方法实例代码详解
2019/06/20 Javascript
JS实现放烟花效果
2020/03/10 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
Python温度转换实例分析
2018/01/17 Python
Python AES加密实例解析
2018/01/18 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
python制作简单五子棋游戏
2019/06/18 Python
Python能做什么
2020/06/02 Python
通信生自我鉴定
2014/01/18 职场文书
买房委托公证书
2014/04/08 职场文书
员工安全承诺书
2014/05/22 职场文书
环保公益策划方案
2014/08/15 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript