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 相关文章推荐
JavaScript中两种链式调用实现代码
Jan 12 Javascript
IE6 fixed的完美解决方案
Mar 31 Javascript
jquery与js函数冲突的两种解决方法
Sep 09 Javascript
javascript中的变量作用域以及变量提升详细介绍
Oct 24 Javascript
浅谈Javascript 执行顺序
Dec 18 Javascript
浅析jquery某一元素重复绑定的问题
Jan 03 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
Oct 31 Javascript
jQuery给动态添加的元素绑定事件的方法
Mar 09 Javascript
json与jsonp知识小结(推荐)
Aug 16 Javascript
对Vue beforeRouteEnter 的next执行时机详解
Aug 25 Javascript
vue+layui实现select动态加载后台数据的例子
Sep 20 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
Aug 18 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
PL-880隐藏功能
2021/03/01 无线电
资料注册后发信小技巧
2006/10/09 PHP
PHP实现图片压缩的两则实例
2014/07/19 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
动态读取JSON解析键值对的方法
2014/06/03 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
js实现表格数据搜索
2020/08/09 Javascript
python编程实现归并排序
2017/04/14 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
Python 使用matplotlib模块模拟掷骰子
2019/08/08 Python
python异常处理try except过程解析
2020/02/03 Python
python开发一款翻译工具
2020/10/10 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
智能旅行箱:Horizn Studios
2018/04/30 全球购物
数学专业毕业生自荐信
2013/11/10 职场文书
后勤部长岗位职责
2013/12/14 职场文书
优秀党员主要事迹
2014/01/19 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
法人身份证明书
2014/10/08 职场文书
小兵张嘎观后感
2015/06/03 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL