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 浏览器事件介绍
Mar 30 Javascript
JavaScript中的setMilliseconds()方法使用详解
Jun 11 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
Nov 26 Javascript
Json按某个键的值进行排序
Dec 22 Javascript
Bootstrap 3 按钮标签实例代码
Feb 21 Javascript
解析Vue.js中的组件
Feb 02 Javascript
JS字符串去除连续或全部重复字符的实例
Mar 08 Javascript
postman+json+springmvc测试批量添加实例
Mar 31 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
Oct 09 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
May 09 Javascript
小程序接口的promise化的实现方法
Dec 11 Javascript
JavaScript类的继承多种实现方法
May 30 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中使用explode查找某个字符是否存在的方法
2011/07/12 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
javascript 利用arguments实现可变长参数
2016/11/21 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
解决bootstrap-select 动态加载数据不显示的问题
2018/08/10 Javascript
angularjs自定义过滤器demo示例
2019/08/24 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
python使用Tesseract库识别验证
2018/03/21 Python
Python生成指定数量的优惠码实操内容
2019/06/18 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
杰夫·班克斯男士服装网上商店:Jeff Banks
2019/10/24 全球购物
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
如何唤起类中的一个方法
2013/11/29 面试题
大二自我鉴定范文
2013/10/05 职场文书
广告学专业推荐信范文
2013/11/23 职场文书
离婚协议书范本2014
2014/10/27 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL
python小型的音频操作库mp3Play
2022/04/24 Python