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检测浏览器flash版本的实现代码
Dec 06 Javascript
js使用eval解析json实例与注意事项分享
Jan 18 Javascript
JavaScript DOM基础
Apr 13 Javascript
详解Angular的数据显示优化处理
Dec 26 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
Mar 09 Javascript
vue中将网页打印成pdf实例代码
Jun 15 Javascript
JavaScript 基础表单验证示例(纯Js实现)
Jul 20 Javascript
Form表单上传文件(type=&quot;file&quot;)的使用
Aug 03 Javascript
JS 数组随机洗牌的实例代码
Sep 12 Javascript
使用angularjs.foreach时return的问题解决
Sep 30 Javascript
JS实现深度优先搜索求解两点间最短路径
Jan 17 Javascript
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
Apr 19 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
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
深入php常用函数的使用汇总
2013/06/08 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
php取出数组单个值的方法
2018/03/12 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
2015/03/03 Javascript
Js+php实现异步拖拽上传文件
2015/06/23 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
Vue隐藏显示、只读实例代码
2018/07/18 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
小程序api实现promise封装过程解析
2019/11/21 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
python 表达式和语句及for、while循环练习实例
2017/07/07 Python
Python给你的头像加上圣诞帽
2018/01/04 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
python机器学习库xgboost的使用
2020/01/20 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
几道PHP的面试题
2012/05/19 面试题
法律系毕业生自荐信范文
2014/03/27 职场文书
车辆转让协议书
2014/04/15 职场文书
小组名称和口号
2014/06/09 职场文书
自愿离婚协议书范文2014
2014/10/12 职场文书
初二物理教学反思
2016/02/19 职场文书
macos系统如何实现微信双开? mac登录两个微信以上微信的技巧
2022/07/23 数码科技