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 相关文章推荐
jquery 模板的应用示例
Nov 12 Javascript
JS实现超精简响应鼠标显示二级菜单代码
Sep 12 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
Nov 16 Javascript
全面解析Bootstrap排版使用方法(文字样式)
Nov 30 Javascript
解决浏览器会自动填充密码的问题
Apr 28 Javascript
用node和express连接mysql实现登录注册的实现代码
Jul 05 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
Jul 06 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
Jul 20 jQuery
用node开发并发布一个cli工具的方法步骤
Jan 03 Javascript
微信小程序tabBar 返回tabBar不刷新页面
Jul 25 Javascript
在Koa.js中实现文件上传的接口功能
Oct 08 Javascript
koa-passport实现本地验证的方法示例
Feb 20 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新手上路(八)
2006/10/09 PHP
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
PHP 第二节 数据类型之数值型
2012/04/28 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
js 验证密码强弱的小例子
2013/03/21 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
node.js中的path.extname方法使用说明
2014/12/09 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
vue.js 使用axios实现下载功能的示例
2018/03/05 Javascript
详解React之父子组件传递和其它一些要点
2018/06/25 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
示例vue 的keep-alive缓存功能的实现
2018/12/13 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
2020/05/16 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
python文件拆分与重组实例
2018/12/10 Python
python3.8与pyinstaller冲突问题的快速解决方法
2020/01/16 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
魅力惠奢品线上平台:MEI.COM
2016/11/29 全球购物
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
学校关爱留守儿童活动方案
2014/08/27 职场文书
办公室卫生管理制度
2015/08/04 职场文书
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
nginx日志格式分析和修改
2022/04/28 Servers