全网整合营销服务商

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

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

js单页hash路由原理与应用实战详解

本文主要介绍了js单页hash路由原理与应用实战详解,分享给大家,具体如下:

什么是路由?

通俗点说,就是不同的URL显示不同的内容

什么是单页应用?

单页,英文缩写为SPA( Single Page Application),就是把各种功能做在一个页面内. 那所谓的单页路由应用就是:在一个页面内,通过切换地址栏的URL来实现切换内容的变化.

如何知道URL切换了呢?

当url后面的锚文本发生变化时, 会触发onhashchange事件。通过这个事件,我们就可以对不同的URL 做出不同的处理。锚文本就是 URL中 #后面的内容,比如:

#/html

#/css

#/javascript

<a href="#/html" rel="external nofollow" rel="external nofollow" >html课程</a> 
<a href="#/css" rel="external nofollow" rel="external nofollow" >css课程</a> 

window.onload = function(){
      //当hash发生变化的时候, 会产生一个事件 onhashchange
      window.onhashchange = function(){
        console.log( '你的hash改变了' );
        //location对象是 javascript内置的(自带的)
        console.log( location );
      }
    }

上例,我们已经通过hash( 就是锚文本 ) 变化, 触发了onhashchange事件, 就可以把hash变化 与 内容 切换对应起来,就实现了单页路由的应用!

接下来,我们通过一个小的*程序,来体验下单页路由:

 <input type="button" value="33选5">
 <div></div>
window.onload = function(){
      var oBtn = document.querySelector("input");
      var oDiv = document.querySelector("div");
      //33->max 5->num
      function buildNum( max, num ){
        var arr = [];
        for( var i = 0; i < max; i++ ){
          arr.push( i + 1 );
        }
        var target = []; //从1-33这33个数字中 随机选出5个数
        for( var i = 0; i < num; i++ ){
          target.push( arr.splice( Math.floor( Math.random() * arr.length ), 1 ) );
        }
        return target;
      }
      oBtn.onclick = function(){
        var num = buildNum( 33, 5 );
        oDiv.innerHTML = num;
        location.hash = num;
      }
      window.onhashchange = function(){
        oDiv.innerHTML = location.hash.substring(1);
      }
    }

上例,我们通过1-33个数字,生成5个随机数,放入Div中,  每次生成一组随机数就更新div的内容,  最后通过浏览器的前进,后退按钮,就可以感觉,所有的随机切换内容像是在切换不同的URL页面, 实际的效果是没有切换任何页面,完全是在一个页面中通过hash变化实现内容切换.

最后,我们结合html5简单的排版,利用hash来做一个选项卡切换的功能:

header,
    footer {
      height: 100px;
      background: #ccc;
    }

    section {
      width: 60%;
      height: 400px;
      background: #eee;
      float: left;
    }

    sidebar {
      width: 40%;
      height: 400px;
      background: #999;
      float: left;
    }

    .clear {
      clear: both;
    }

<header>
    头部
  </header>
  <section>
    <ul>
      <li><a href="#/" rel="external nofollow" >全部</a></li>
      <li><a href="#/html" rel="external nofollow" rel="external nofollow" >html课程</a></li>
      <li><a href="#/css" rel="external nofollow" rel="external nofollow" >css课程</a></li>
      <li><a href="#/javascript" rel="external nofollow" >javascript课程</a></li>
    </ul>
  </section>
  <sidebar>
    右边
  </sidebar>
  <div class="clear"></div>
  <footer>
    底部
  </footer>
(function(){
      var Router = function(){
        /*
          this.routes['/'] = function(){}  
          this.routes['/html'] = function(){}
        */ 
        this.routes = {};//用来保存路由
        this.curUrl = ''; //获取当前的hash
      }
      Router.prototype.init = function(){ //监听路由变化
        //call,apply
        window.addEventListener( 'hashchange', this.reloadPage.bind(this) );
      }
      Router.prototype.reloadPage = function(){
        this.curUrl = location.hash.substring(1) || '/';
        this.routes[this.curUrl]();    
      }
      Router.prototype.map = function( key, callback ){ //保存路由对应的函数
        this.routes[key] = callback;
        // console.log( this.routes );
      } 
      window.Router = Router;
    })();

    var oRouter = new Router();
    oRouter.init();
    oRouter.map( '/', function(){
      var oSidebar = document.querySelector("sidebar");
      oSidebar.innerHTML = 'ghostwu提供html,css,javascript从0基础到精通系列课程,只要会开关机,就能学会';
    });
    oRouter.map('/html', function(){
      var oSidebar = document.querySelector("sidebar");
      oSidebar.innerHTML = 'ghostwu提供html5从入门到精通的课程';
    });
    oRouter.map('/css', function(){
      var oSidebar = document.querySelector("sidebar");
      oSidebar.innerHTML = 'ghostwu提供从入门到玩转css3课程';
    });
    oRouter.map('/javascript', function(){
      var oSidebar = document.querySelector("sidebar");
      oSidebar.innerHTML = "ghostwu提供从0基础到精通javascript系列课程";
    });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# js  # hash路由  # 路由实现原理  # js单页hash路由  # 是在  # 随机数  # 就可以  # 页面内  # 就能  # 给大家  # 就可  # 来做  # 自带  # 来实现  # 以对  # 玩转  # 下单  # 大家多多  # 选项卡  # 实现了  # 英文缩写  # 改变了  # console  # function 


相关文章: 公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  TestNG的testng.xml配置文件怎么写  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  建站之星好吗?新手能否轻松上手建站?  行程制作网站有哪些,第三方机票电子行程单怎么开?  建站之星价格显示格式升级,你的预算足够吗?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  建站之星代理费用多少?最新价格详情介绍  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  手机网站制作与建设方案,手机网站如何建设?  网站制作壁纸教程视频,电脑壁纸网站?  网站代码制作软件有哪些,如何生成自己网站的代码?  如何自定义建站之星网站的导航菜单样式?  Java解压缩zip - 解压缩多个文件或文件夹实例  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  如何制作一个表白网站视频,关于勇敢表白的小标题?  宝塔建站后网页无法访问如何解决?  如何用好域名打造高点击率的自主建站?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  香港服务器部署网站为何提示未备案?  如何快速完成中国万网建站详细流程?  建站之星伪静态规则如何设置?  如何登录建站主机?访问步骤全解析  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  如何选择CMS系统实现快速建站与SEO优化?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  XML的“混合内容”是什么 怎么用DTD或XSD定义  如何通过VPS建站无需域名直接访问?  模具网站制作流程,如何找模具客户?  建站之星微信建站一键生成小程序+多端营销系统  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  建站之星如何取消后台验证码生成?  如何选择高效响应式自助建站源码系统?  自助网站制作软件,个人如何自助建网站?  高性价比服务器租赁——企业级配置与24小时运维服务  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  建站主机系统SEO优化与智能配置核心关键词操作指南  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  建站主机选择指南:服务器配置与SEO优化实战技巧  网站制作说明怎么写,简述网页设计的流程并说明原因?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  建站之星×万网:智能建站系统+自助建站平台一键生成  文字头像制作网站推荐软件,醒图能自动配文字吗? 

您的项目需求

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