本文主要介绍了js单页hash路由原理与应用实战详解,分享给大家,具体如下:

什么是路由?
通俗点说,就是不同的URL显示不同的内容
什么是单页应用?
单页,英文缩写为SPA( Single Page Application),就是把各种功能做在一个页面内. 那所谓的单页路由应用就是:在一个页面内,通过切换地址栏的URL来实现切换内容的变化.
如何知道URL切换了呢?
当url后面的锚文本发生变化时, 会触发onhashchange事件。通过这个事件,我们就可以对不同的URL 做出不同的处理。锚文本就是 URL中 #后面的内容,比如:
#/html
#/css
#/javascript
<a href="#/html" rel="external nofollow" rel="external nofollow" >html课程</a> <a href="#/css" rel="external nofollow" rel="external nofollow" >css课程</a>
window.onload = function(){
//当hash发生变化的时候, 会产生一个事件 onhashchange
window.onhashchange = function(){
console.log( '你的hash改变了' );
//location对象是 javascript内置的(自带的)
console.log( location );
}
}
上例,我们已经通过hash( 就是锚文本 ) 变化, 触发了onhashchange事件, 就可以把hash变化 与 内容 切换对应起来,就实现了单页路由的应用!
接下来,我们通过一个小的*程序,来体验下单页路由:
<input type="button" value="33选5"> <div></div>
window.onload = function(){
var oBtn = document.querySelector("input");
var oDiv = document.querySelector("div");
//33->max 5->num
function buildNum( max, num ){
var arr = [];
for( var i = 0; i < max; i++ ){
arr.push( i + 1 );
}
var target = []; //从1-33这33个数字中 随机选出5个数
for( var i = 0; i < num; i++ ){
target.push( arr.splice( Math.floor( Math.random() * arr.length ), 1 ) );
}
return target;
}
oBtn.onclick = function(){
var num = buildNum( 33, 5 );
oDiv.innerHTML = num;
location.hash = num;
}
window.onhashchange = function(){
oDiv.innerHTML = location.hash.substring(1);
}
}
上例,我们通过1-33个数字,生成5个随机数,放入Div中, 每次生成一组随机数就更新div的内容, 最后通过浏览器的前进,后退按钮,就可以感觉,所有的随机切换内容像是在切换不同的URL页面, 实际的效果是没有切换任何页面,完全是在一个页面中通过hash变化实现内容切换.
最后,我们结合html5简单的排版,利用hash来做一个选项卡切换的功能:
header,
footer {
height: 100px;
background: #ccc;
}
section {
width: 60%;
height: 400px;
background: #eee;
float: left;
}
sidebar {
width: 40%;
height: 400px;
background: #999;
float: left;
}
.clear {
clear: both;
}
<header>
头部
</header>
<section>
<ul>
<li><a href="#/" rel="external nofollow" >全部</a></li>
<li><a href="#/html" rel="external nofollow" rel="external nofollow" >html课程</a></li>
<li><a href="#/css" rel="external nofollow" rel="external nofollow" >css课程</a></li>
<li><a href="#/javascript" rel="external nofollow" >javascript课程</a></li>
</ul>
</section>
<sidebar>
右边
</sidebar>
<div class="clear"></div>
<footer>
底部
</footer>
(function(){
var Router = function(){
/*
this.routes['/'] = function(){}
this.routes['/html'] = function(){}
*/
this.routes = {};//用来保存路由
this.curUrl = ''; //获取当前的hash
}
Router.prototype.init = function(){ //监听路由变化
//call,apply
window.addEventListener( 'hashchange', this.reloadPage.bind(this) );
}
Router.prototype.reloadPage = function(){
this.curUrl = location.hash.substring(1) || '/';
this.routes[this.curUrl]();
}
Router.prototype.map = function( key, callback ){ //保存路由对应的函数
this.routes[key] = callback;
// console.log( this.routes );
}
window.Router = Router;
})();
var oRouter = new Router();
oRouter.init();
oRouter.map( '/', function(){
var oSidebar = document.querySelector("sidebar");
oSidebar.innerHTML = 'ghostwu提供html,css,javascript从0基础到精通系列课程,只要会开关机,就能学会';
});
oRouter.map('/html', function(){
var oSidebar = document.querySelector("sidebar");
oSidebar.innerHTML = 'ghostwu提供html5从入门到精通的课程';
});
oRouter.map('/css', function(){
var oSidebar = document.querySelector("sidebar");
oSidebar.innerHTML = 'ghostwu提供从入门到玩转css3课程';
});
oRouter.map('/javascript', function(){
var oSidebar = document.querySelector("sidebar");
oSidebar.innerHTML = "ghostwu提供从0基础到精通javascript系列课程";
});
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js
# hash路由
# 路由实现原理
# js单页hash路由
# 是在
# 随机数
# 就可以
# 页面内
# 就能
# 给大家
# 就可
# 来做
# 自带
# 来实现
# 以对
# 玩转
# 下单
# 大家多多
# 选项卡
# 实现了
# 英文缩写
# 改变了
# console
# function
相关文章:
如何通过cPanel快速搭建网站?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
如何在IIS服务器上快速部署高效网站?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
建站主机选哪家性价比最高?
制作网站公司那家好,网络公司是做什么的?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何用y主机助手快速搭建网站?
如何使用Golang table-driven基准测试_多组数据测量函数效率
在线制作视频网站免费,都有哪些好的动漫网站?
如何确保西部建站助手FTP传输的安全性?
如何通过西部建站助手安装IIS服务器?
专业商城网站制作公司有哪些,pi商城官网是哪个?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
网站设计制作企业有哪些,抖音官网主页怎么设置?
建站之星图片链接生成指南:自助建站与智能设计教程
兔展官网 在线制作,怎样制作微信请帖?
Android滚轮选择时间控件使用详解
建站之星与建站宝盒如何选择最佳方案?
IOS倒计时设置UIButton标题title的抖动问题
网站制作公司排行榜,抖音怎样做个人官方网站
常州企业网站制作公司,全国继续教育网怎么登录?
常州企业建站如何选择最佳模板?
建站主机类型有哪些?如何正确选型
宝塔新建站点为何无法访问?如何排查?
如何在橙子建站上传落地页?操作指南详解
C++中引用和指针有什么区别?(代码说明)
如何快速打造个性化非模板自助建站?
如何做网站制作流程,*游戏网站怎么搭建?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
网站设计制作公司地址,网站建设比较好的公司都有哪些?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
建站主机空间推荐 高性价比配置与快速部署方案解析
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
如何在建站宝盒中设置产品搜索功能?
制作营销网站公司,淘特是干什么用的?
家庭服务器如何搭建个人网站?
北京网站制作的公司有哪些,北京白云观官方网站?
网站制作公司排行榜,四大门户网站排名?
如何在万网开始建站?分步指南解析
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
建站之星在线版空间:自助建站+智能模板一键生成方案
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
如何确认建站备案号应放置的具体位置?
大同网页,大同瑞慈医院官网?
,巨量百应是干嘛的?
如何用腾讯建站主机快速创建免费网站?
如何快速搭建高效简练网站?
临沂网站制作公司有哪些,临沂第四中学官网?
*请认真填写需求信息,我们会在24小时内与您取得联系。