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 相关文章推荐
jQuery+ajax实现顶一下,踩一下效果
Jul 17 Javascript
jQuery统计上传文件大小的方法
Jan 24 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
Aug 07 Javascript
js模仿php中strtotime()与date()函数实现方法
Aug 11 Javascript
angular.bind使用心得
Oct 26 Javascript
Javascript简单实现面向对象编程继承实例代码
Nov 27 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
Mar 25 Javascript
BootStrap实现轮播图效果(收藏)
Dec 30 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
Oct 10 Javascript
[原创]微信小程序获取网络类型的方法示例
Mar 01 Javascript
vue 解决form表单提交但不跳转页面的问题
Oct 30 Javascript
详解Vue的七种传值方式
Feb 08 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
PHP5+UTF8多文件上传类
2008/10/17 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
2011/10/15 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
javascript onmouseout 解决办法
2010/07/17 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
Nodejs之http的表单提交
2017/07/07 NodeJs
webpack构建vue项目的详细教程(配置篇)
2017/07/17 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
python检测服务器是否正常
2014/02/16 Python
举例详解Python中的split()函数的使用方法
2015/04/07 Python
python实现文件快照加密保护的方法
2015/06/30 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
python 使用get_argument获取url query参数
2017/04/28 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
Python如何读写二进制数组数据
2020/08/01 Python
python计算auc的方法
2020/09/09 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
德国高尔夫商店:Par71.de
2020/11/29 全球购物
2014年乡镇工会工作总结
2014/12/02 职场文书
2015年少先队活动总结
2015/03/25 职场文书
第二次离婚起诉书
2015/05/18 职场文书