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 性能优化指南(3)
May 21 Javascript
angularJS 中$attrs方法使用指南
Feb 09 Javascript
jQuery实现无限往下滚动效果代码
Apr 16 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
Sep 24 Javascript
node文件上传功能简易实现代码
Jun 16 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
Jul 11 Javascript
Vue实现一个返回顶部backToTop组件
Jul 25 Javascript
js统计页面上每个标签的数量实例代码
May 29 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
May 09 Javascript
JS中实现一个下载进度条及播放进度条的代码
Jun 10 Javascript
Vue基础配置讲解
Nov 29 Javascript
原生js实现自定义消息提示框
Nov 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
PHP Token(令牌)设计
2008/03/15 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
Symfony2学习笔记之模板用法详解
2016/03/17 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
JavaScript去掉空格的方法集合
2010/12/28 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
2013/06/24 Javascript
jquery实现div拖拽宽度示例代码
2013/07/31 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
vue使用video插件vue-video-player详解
2020/10/23 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
python中for语句简单遍历数据的方法
2015/05/07 Python
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
python实现log日志的示例代码
2018/04/28 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
python获取txt文件词向量过程详解
2019/07/05 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
浅谈django框架集成swagger以及自定义参数问题
2020/07/07 Python
python两种注释用法的示例
2020/10/09 Python
如何利用Python 进行边缘检测
2020/10/14 Python
python基于opencv 实现图像时钟
2021/01/04 Python
物业招聘计划书
2014/01/10 职场文书
暑期社会实践方案
2014/02/05 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
测量员岗位职责
2015/02/14 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书