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


Posted in Javascript onSeptember 11, 2016

前言

前端路由在很多开源的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异步请求页面内容等功能。虽然这个实例非常简单,但实际上很多路由系统的根基都立于此,其他路由系统主要是对自身使用的框架机制进行配套及优化。好了,本文的内容到这就结束了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
跟随鼠标旋转的文字
Nov 30 Javascript
用JavaScript显示随机图像或引用
Apr 21 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
Feb 03 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
Jun 05 Javascript
详解jquery uploadify 上传文件
Nov 09 Javascript
JavaScript事件委托的技术原理探讨示例
Apr 17 Javascript
JavaScript实现的购物车效果可以运用在好多地方
May 09 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
Jun 24 Javascript
AngularJS 入门教程之HTML DOM实例详解
Jul 28 Javascript
js仿腾讯QQ的web登陆界面
Aug 19 Javascript
AngularJS实现使用路由切换视图的方法
Jan 24 Javascript
vue项目实现多语言切换的思路
Sep 17 Javascript
JavaScript中Array的实用操作技巧分享
Sep 11 #Javascript
JS实现六边形3D拖拽翻转效果的方法
Sep 11 #Javascript
最全面的百度地图JavaScript离线版开发
Sep 10 #Javascript
简单分析javascript中的函数
Sep 10 #Javascript
javascript数组常用方法汇总
Sep 10 #Javascript
JavaScript实现输入框与清空按钮联动效果
Sep 09 #Javascript
Three.js快速入门教程
Sep 09 #Javascript
You might like
桌面中心(四)数据显示
2006/10/09 PHP
利用php来自动调用不同服务器上的flash
2006/10/09 PHP
PHP遍历数组的几种方法
2012/03/22 PHP
基于MySQL分区性能的详细介绍
2013/05/02 PHP
PHP循环结构实例讲解
2014/02/10 PHP
yii的CURD操作实例详解
2014/12/04 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
php去除二维数组的重复项方法
2015/11/03 PHP
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
[26:21]浴火之凤-TI4世界冠军Newbee战队纪录片
2014/08/07 DOTA
python计算文本文件行数的方法
2015/07/06 Python
Python模块结构与布局操作方法实例分析
2017/07/24 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
Python中关于浮点数的冷知识
2019/09/22 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
护理学专业推荐信
2013/12/03 职场文书
毕业生自荐书模版
2014/01/04 职场文书
工作会议方案
2014/05/21 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
2015年酒店工作总结
2015/04/28 职场文书
预备党员转正意见
2015/06/01 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书
导游词幽默开场白
2019/06/26 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL