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 相关文章推荐
js动态修改表格行colspan列跨度的方法
Mar 30 Javascript
js实现兼容IE、Firefox的图片缩放代码
Dec 08 Javascript
Bootstrap表单组件教程详解
Apr 26 Javascript
jquery分隔Url的param方法(推荐)
May 25 Javascript
详解webpack分包及异步加载套路
Jun 29 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
Jul 11 Javascript
Angular6 用户自定义标签开发的实现方法
Jan 08 Javascript
React性能优化系列之减少props改变的实现方法
Jan 17 Javascript
微信小程序实现图片翻转效果的实例代码
Sep 20 Javascript
Layer+Echarts构建弹出层折线图的方法
Sep 25 Javascript
JavaScript Reflect Metadata实现详解
Dec 12 Javascript
js实现登录时记住密码的方法分析
Apr 05 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中通过Ajax如何实现异步文件上传的代码实例
2011/05/07 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
2016/10/10 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
Flask框架的学习指南之用户登录管理
2016/11/20 Python
深入理解Python中变量赋值的问题
2017/01/12 Python
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
Python流程控制 while循环实现解析
2019/09/02 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
Opodo意大利:欧洲市场上领先的在线旅行社
2019/10/24 全球购物
请问如下代码执行后a和b的值分别是什么
2016/05/05 面试题
医院实习介绍信
2014/01/12 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
激励员工的口号
2014/06/16 职场文书
小学生感恩父母演讲稿
2014/08/28 职场文书
政风行风评议心得体会
2014/10/21 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
决心书格式范文
2015/09/23 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书