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弹出框的用法示例(2)
Aug 26 Javascript
推荐10 款 SVG 动画的 JavaScript 库
Mar 24 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
Jun 19 Javascript
js限制文本框的输入内容代码分享(3类)
Aug 20 Javascript
JavaScript 栈的详解及实例代码
Jan 22 Javascript
微信小程序 下拉菜单简单实例
Apr 13 Javascript
angular2路由之routerLinkActive指令【推荐】
May 30 Javascript
对vue 键盘回车事件的实例讲解
Aug 25 Javascript
js实现鼠标拖拽div左右滑动
Jan 15 Javascript
原生js实现日历效果
Mar 02 Javascript
vue实现购物车案例
May 30 Javascript
js回到页面指定位置的三种方式
Dec 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
十天学会php之第十天
2006/10/09 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
js实现select组件的选择输入过滤代码
2014/10/14 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
javascript判断firebug是否开启的方法
2016/11/23 Javascript
js的三种继承方式详解
2017/01/21 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
node.js爬取中关村的在线电瓶车信息
2018/11/13 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
python网络编程学习笔记(一)
2014/06/09 Python
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
解决python 上传图片限制格式问题
2019/10/30 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
生产助理岗位职责
2014/06/18 职场文书
pytorch中的model=model.to(device)使用说明
2021/05/24 Python
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python
JS的深浅复制详细
2021/10/16 Javascript