Javascript实现前端简单的路由实例

 更新时间:2016年09月11日 11:59:39   投稿:daisy  
本文将使用javascript实现一个极其简单的路由实例。WEB开发中路由概念并不陌生,我们接触到的有前端路由和后端路由。后端路由在很多框架中是一个重要的模块,同样前端路由在单页面应用也很常见,它使得前端页面体验更流畅。

前言

前端路由在很多开源的js类库框架中都得到支持,如angularJS,Backbone,Reactjs等等。前端路由和后端路由原理一样,是让所有的交互和展现在一个页面运行以达到减少服务器请求,提高客户体验的目的,越来越多的网站特别是web应用都用到了前端路由。

HTML

页面中有一个导航菜单ul,和一个div#result用来显示结果,当点击导航菜单时,#result中会显示不同的结果内容。

<ul> 
 <li><a href="#/">首页</a></li> 
 <li><a href="#/product">产品</a></li> 
 <li><a href="#/server">服务</a></li> 
</ul>
<div id="result"></div>

JAVASCRIPT

说一下前端路由实现的简要原理,以 hash 形式(也可以使用 History API 来处理)为例,当 url 的 hash 发生变化时,触发 hashchange 注册的回调,回调中去进行不同的操作,进行不同的内容的展示。

function Router(){
 this.routes = {};
 this.curUrl = '';

 this.route = function(path, callback){
  this.routes[path] = callback || function(){};
 };

 this.refresh = function(){
  this.curUrl = location.hash.slice(1) || '/';
  this.routes[this.curUrl]();
 };

 this.init = function(){
  window.addEventListener('load', this.refresh.bind(this), false);
  window.addEventListener('hashchange', this.refresh.bind(this), false);
 }
}

上面代码中路由系统Router对象实现,主要提供三个方法:

     init监听浏览器 url hash 更新事件。

     route存储路由更新时的回调到回调数组routes中,回调函数将负责对页面的更新。

     refresh执行当前url对应的回调函数,更新页面。

Router调用方式如下:

点击触发 url 的 hash 改变,并对应地更新内容,运行后你会发现每次点击菜单时,#result中会变换背景色和内容。

var R = new Router();
R.init();
var res = document.getElementById('result');

 R.route('/', function() {
 res.style.background = 'blue';
 res.innerHTML = '这是首页';
 });
 R.route('/product', function() {
  res.style.background = 'orange';
 res.innerHTML = '这是产品页';
 });
 R.route('/server', function() {
  res.style.background = 'black';
 res.innerHTML = '这是服务页';
 });

总结

以上为一个前端路由的简单实现,实际应用中,应该对hash进行正则匹配处理,以满足大量url的应用,同时增加ajax异步请求页面内容等功能。虽然这个实例非常简单,但实际上很多路由系统的根基都立于此,其他路由系统主要是对自身使用的框架机制进行配套及优化。好了,本文的内容到这就结束了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

相关文章

  • 详解swipe使用及竖屏页面滚动方法

    详解swipe使用及竖屏页面滚动方法

    这篇文章主要介绍了swipe使用及竖屏页面滚动方法,本文通过实例代码讲解的非常详细,需要的朋友可以参考下
    2018-06-06
  • Javascript中classList的基本使用方法

    Javascript中classList的基本使用方法

    classList 是一个非常实用的工具,可以让我们轻松地操作元素的类名,在使用 classList 时,我们可以通过 add、remove、toggle 和 contains 等方法来添加、删除、切换和检查类名,接下来我们详细学习一下classList的使用方法以及相关方法,感兴趣的朋友一起看看吧
    2023-10-10
  • 如何在JavaScript中实现私有属性的写类方式(一)

    如何在JavaScript中实现私有属性的写类方式(一)

    这篇文章主要介绍了如何在JavaScript中实现私有属性的写类方式。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • js实现多张图片打包成zip

    js实现多张图片打包成zip

    图片下载是前端常见的需求,如果一张一张下载未免太影响体验了,于是写下了这个多张图片打包成zip的demo
    2021-05-05
  • JavaScript中的 attribute 和 jQuery中的 attr 方法浅析

    JavaScript中的 attribute 和 jQuery中的 attr 方法浅析

    这篇文章主要介绍了JavaScript中的 attribute 和 jQuery中的 attr 方法浅析,需要的朋友可以参考下
    2017-01-01
  • Ionic3 UI组件之Gallery Modal详解

    Ionic3 UI组件之Gallery Modal详解

    这篇文章主要为大家详细介绍了Ionic3 UI组件之Gallery Modal的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 微信小程序实现日历打卡

    微信小程序实现日历打卡

    这篇文章主要为大家详细介绍了微信小程序实现日历打卡,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • extjs中form与grid交互数据(record)的方法

    extjs中form与grid交互数据(record)的方法

    这篇文章介绍了extjs中form与grid交互数据(record)的方法,有需要的朋友可以参考一下
    2013-08-08
  • Javascript实用方法之json合并的场景分析

    Javascript实用方法之json合并的场景分析

    这篇文章主要介绍了Javascript实用方法之json合并,jQuery 的“extend()”方法有两个原型:合并的方法,分别是浅合并和深度合并,本文通过代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • javascript 模块依赖管理的本质深入详解

    javascript 模块依赖管理的本质深入详解

    这篇文章主要介绍了javascript 模块依赖管理,结合实例形式深入分析了javascript 模块依赖管理具体定义、实现方法及注意事项,需要的朋友可以参考下
    2020-04-04

最新评论