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 相关文章推荐
js鼠标及对象坐标控制属性详细解析
Dec 14 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
Sep 30 Javascript
Java中Timer的用法详解
Oct 21 Javascript
漂亮! js实现颜色渐变效果
Aug 12 Javascript
微信小程序 教程之列表渲染
Oct 18 Javascript
js 实现省市区三级联动菜单效果
Feb 20 Javascript
JavaScript 中的 this 工作原理
Jun 20 Javascript
javascript异步编程的六种方式总结
May 17 Javascript
Vue-cli4 配置 element-ui 按需引入操作
Sep 11 Javascript
js实现移动端图片滑块验证功能
Sep 29 Javascript
Vue toFixed保留两位小数的3种方式
Oct 23 Javascript
Vue操作Storage本地化存储
Apr 29 Vue.js
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
PHP自定义大小验证码的方法详解
2013/06/07 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
PHP的openssl加密扩展使用小结(推荐)
2016/07/18 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
js innerHTML 的一些问题的解决方法
2008/06/22 Javascript
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
2009/12/09 Javascript
jquery实现经典的淡入淡出选项卡效果代码
2015/09/22 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
详解Python中的Cookie模块使用
2015/07/06 Python
python常用函数详解
2016/09/13 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
python中logging库的使用总结
2017/10/18 Python
使用python实现ANN
2017/12/20 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
python查询mysql,返回json的实例
2018/03/26 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
Python爬取梨视频的示例
2021/01/29 Python
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
土木工程专业大学毕业生求职信
2013/10/13 职场文书
地方课程教学计划
2015/01/19 职场文书
学校青年志愿者活动总结
2015/05/06 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
幼儿园教师读书笔记
2015/06/29 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书