全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

js实现自定义路由

本文实现自定义路由,主要是事件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>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# js  # 路由  # Vue.js路由组件vue-router使用方法详解  # angular.js之路由的选择方法  # AngularJS 路由详解和简单实例  # AngularJS 路由和模板实例及路由地址简化方法(必看)  # 全面解析JavaScript的Backbone.js框架中的Router路由  # 使用AngularJS对路由进行安全性处理的方法  # JS实现简单路由器功能的方法  # Angularjs制作简单的路由功能demo  # director.js实现前端路由使用实例  # nodejs中实现路由功能  # 轻松创建nodejs服务器(4):路由  # 需要注意  # 的是  # 我是  # 两种  # 这才  # 自定义  # 可以使用  # 体会到  # 第二种  # 第一种  # 主要是  # window  # addEventListener  # false  # currentUrl  # bind  # refresh  # return  # load  # init 


相关文章: 长沙企业网站制作哪家好,长沙水业集团官方网站?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  如何自定义建站之星网站的导航菜单样式?  利用JavaScript实现拖拽改变元素大小  如何通过VPS建站实现广告与增值服务盈利?  建站之星如何一键生成手机站?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  php json中文编码为null的解决办法  建站之星导航如何优化提升用户体验?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  如何在IIS7上新建站点并设置安全权限?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  如何通过服务器快速搭建网站?完整步骤解析  如何用狗爹虚拟主机快速搭建网站?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  建站主机选购指南:核心配置与性价比推荐解析  头像制作网站在线制作软件,dw网页背景图像怎么设置?  如何在香港服务器上快速搭建免备案网站?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何确认建站备案号应放置的具体位置?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  如何在云主机上快速搭建网站?  独立制作一个网站多少钱,建立网站需要花多少钱?  如何在IIS管理器中快速创建并配置网站?  如何快速搭建高效简练网站?  javascript中的try catch异常捕获机制用法分析  如何获取免费开源的自助建站系统源码?  Android自定义listview布局实现上拉加载下拉刷新功能  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  定制建站是什么?如何实现个性化需求?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  Swift中switch语句区间和元组模式匹配  如何快速搭建虚拟主机网站?新手必看指南  如何在云指建站中生成FTP站点?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  建站主机与服务器功能差异如何区分?  宝塔建站助手安装配置与建站模板使用全流程解析  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  *服务器网站为何频现安全漏洞?  如何构建满足综合性能需求的优质建站方案?  音响网站制作视频教程,隆霸音响官方网站?  代刷网站制作软件,别人代刷火车票靠谱吗?  深圳网站制作培训,深圳哪些招聘网站比较好?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何在自有机房高效搭建专业网站?  TestNG的testng.xml配置文件怎么写 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。