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 While 循环基础教程
Apr 05 Javascript
jquery 图片预加载 自动等比例缩放插件
Dec 25 Javascript
jquery实现类似淘宝星星评分功能实例
Sep 12 Javascript
javascript淘宝主图放大镜功能
Oct 20 Javascript
Angular.js实现注册系统的实例详解
Dec 18 Javascript
深入理解javascript的getTime()方法
Feb 16 Javascript
canvas 实现中国象棋
Feb 17 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
Aug 10 jQuery
Vue.js中关于侦听器(watch)的高级用法示例
May 02 Javascript
vue解决弹出蒙层滑动穿透问题的方法
Sep 22 Javascript
使用Javascript简单计算器
Nov 17 Javascript
javascript实现随机抽奖功能
Dec 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编写的简单页面跳转功能实现代码
2013/11/27 PHP
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
javascript trim函数在IE下不能用的解决方法
2014/09/12 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
Bootstrap被封装的弹层
2016/07/20 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
Python实现二分法算法实例
2015/02/02 Python
python实现简单爬虫功能的示例
2016/10/24 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
python如何对实例属性进行类型检查
2018/03/20 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
用Python实现最速下降法求极值的方法
2019/07/10 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
最新结婚典礼主持词
2014/03/14 职场文书
销售人员求职信
2014/07/22 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
美丽人生观后感
2015/06/03 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书
Python基础之字符串格式化详解
2021/04/21 Python
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python