本文实现自定义路由,主要是事件hashchange的使用,然后根据我们的业务需求封装。

首先实现一个router的类,并实例化。
function _router(config){
this.config = config ? config : {};
}
_router.prototype = {
event:function(str,callback){
var events = str.split(' ');
for (var i in events) window.addEventListener(events[i],callback,false);
},
init: function() {
this.event('load hashchange',this.refresh.bind(this));
return this;
},
refresh: function() {
this.currentUrl = location.hash.slice(1) || '/';
this.config[this.currentUrl]();
},
route: function(path,callback){
this.config[path] = callback || function(){};
}
}
function router (config){
return new _router(config).init();
}
上边唯一需要注意的是,在使用addEventListener的时候,需要注意bind函数的使用,因为我是踩了坑,这才体会到$.proxy()。
上边使用的时候可以使用两种方法进行注册,但第二种是依赖第一种的。
方法一:
var Router = router({
'/' : function(){content.style.backgroundColor = 'white';},
'/1': function(){content.style.backgroundColor = 'blue';},
'/2': function(){content.style.backgroundColor = 'green';}
})
方法二:
Router.route('/3',function(){ content.style.backgroundColor = 'yellow'; })
完整代码:
<html>
<head>
<title></title>
</head>
<body>
<ul>
<li><a href="#/1">/1: blue</a></li>
<li><a href="#/2">/2: green</a></li>
<li><a href="#/3">/3: yellow</a></li>
</ul>
<script>
var content = document.querySelector('body');
function _router(config){
this.config = config ? config : {};
}
_router.prototype = {
event:function(str,callback){
var events = str.split(' ');
for (var i in events) window.addEventListener(events[i],callback,false);
},
init: function() {
this.event('load hashchange',this.refresh.bind(this));
return this;
},
refresh: function() {
this.currentUrl = location.hash.slice(1) || '/';
this.config[this.currentUrl]();
},
route: function(path,callback){
this.config[path] = callback || function(){};
}
}
function router (config){
return new _router(config).init();
}
var Router = router({
'/' : function(){content.style.backgroundColor = 'white';},
'/1': function(){content.style.backgroundColor = 'blue';},
'/2': function(){content.style.backgroundColor = 'green';}
})
Router.route('/3',function(){
content.style.backgroundColor = 'yellow';
})
</script>
</body>
</html>
<script>
</script>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# js
# 路由
# Vue.js路由组件vue-router使用方法详解
# angular.js之路由的选择方法
# AngularJS 路由详解和简单实例
# AngularJS 路由和模板实例及路由地址简化方法(必看)
# 全面解析JavaScript的Backbone.js框架中的Router路由
# 使用AngularJS对路由进行安全性处理的方法
# JS实现简单路由器功能的方法
# Angularjs制作简单的路由功能demo
# director.js实现前端路由使用实例
# nodejs中实现路由功能
# 轻松创建nodejs服务器(4):路由
# 需要注意
# 的是
# 我是
# 两种
# 这才
# 自定义
# 可以使用
# 体会到
# 第二种
# 第一种
# 主要是
# window
# addEventListener
# false
# currentUrl
# bind
# refresh
# return
# load
# init
相关文章:
实例解析angularjs的filter过滤器
导航网站建站方案与优化指南:一站式高效搭建技巧解析
独立制作一个网站多少钱,建立网站需要花多少钱?
*服务器网站为何频现安全漏洞?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
网站app免费制作软件,能免费看各大网站视频的手机app?
如何高效完成独享虚拟主机建站?
如何选择适配移动端的WAP自助建站平台?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
如何选择可靠的免备案建站服务器?
,制作一个手机app网站要多少钱?
如何在VPS电脑上快速搭建网站?
如何快速生成可下载的建站源码工具?
建站之星如何实现网站加密操作?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
XML的“混合内容”是什么 怎么用DTD或XSD定义
如何在万网主机上快速搭建网站?
招商网站制作流程,网站招商广告语?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
Swift开发中switch语句值绑定模式
视频网站app制作软件,有什么好的视频聊天网站或者软件?
建站之星价格显示格式升级,你的预算足够吗?
建站之星如何通过成品分离优化网站效率?
网站网页制作专业公司,怎样制作自己的网页?
如何零基础开发自助建站系统?完整教程解析
三星网站视频制作教程下载,三星w23网页如何全屏?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
如何通过FTP服务器快速搭建网站?
高端网站建设与定制开发一站式解决方案 中企动力
广州建站公司哪家好?十大优质服务商推荐
如何设计高效校园网站?
建站之星安装路径如何正确选择及配置?
西安大型网站制作公司,西安招聘网站最好的是哪个?
网站制作公司,橙子建站是合法的吗?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
网站专业制作公司有哪些,做一个公司网站要多少钱?
南平网站制作公司,2025年南平市事业单位报名时间?
如何做网站制作流程,*游戏网站怎么搭建?
如何选择域名并搭建高效网站?
设计网站制作公司有哪些,制作网页教程?
建站之星伪静态规则如何设置?
建站之星如何开启自定义404页面避免用户流失?
如何制作网站标识牌,动态网站如何制作(教程)?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
如何在Windows环境下新建FTP站点并设置权限?
免费网站制作appp,免费制作app哪个平台好?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
如何快速上传自定义模板至建站之星?
*请认真填写需求信息,我们会在24小时内与您取得联系。