要做类似 https://github.com/jgallen23/routie 的功能,单页app
就是需要处理前进后退和view的route[需要兼容ie6]
http://millermedeiros.github.io/crossroads.js/
https://github.com/asual/jquery-address
https://github.com/cowboy/jquery-bbq 好久没更新了
https://github.com/browserstate/history.js 好复杂的感觉
记得几年前自己做的一个项目是监听hash来实现的,现在再次遇到这个需求
找了一下,发现还是之前的库[crossroads,bbq],history.js居然 2000多行还不支持Opera 11 ,Mercury iOS
想问大家推荐一些好用的route的思路,以及为啥一个前端url监听搞的这么复杂,这么多年过去了居然没有相对清晰好用的方案
难道非要逼我抄一个 https://github.com/RubyLouvre/mmRouter/ 吗
[每次遇到这样的解决方案问题,发现司徒大的东西还是很实用滴~~]
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
还不快来试试我的?
Q.js 是一个炒鸡轻量的前端单页路由框架。
https://github.com/itorr/q.js
为了更好的利用缓存以及更少的后端支援,Q.js放弃了 HTML5 State,通过#!格式的 url hach 重现了 url 路由功能。
834bytewindow.Q万物之
死始我们先来一段简单的 Hello World
打开例子后,浏览器会从
http://simple.com/跳转到http://simple.com/#!home,并且在页面显示 Hallo World。如此,您的第一个通过
Q.js实现的 URL 路由就工作了~接着我们再详细说明下,如何让
Q.js工作的。注册URL
在
Q.js中,提供 关键字 和 正则表达式 两种注册 URL 方式。关键字注册 URL 在
Q.js中效率最高、但需要按照关键字模式规划 URL,在前者不能满足需求情况下可以使用正则注册法~接下来我们通过规划一个 blog 的URL,来学习如何使用
Q.js注册URL。首页
我们先从首页开始~
在注册之前我们分析一下注册首页 URL 都有哪些需求:
1. 首先首页有一个固定格式
2. 在大部分情况下不需要在 URL 中体现参数传递
3. 是打开域名时的默认展示页
首先我们通过注册一个固定页面
home,回调不期待传值通过以上代码 访问
#!home时,就会触发后面的回调。在回调中我们修改页面 DOM 实现页面无刷新变换内容。
(这部分不在本篇文档所述范畴)
按照这样的方法,同理 我们也可以实现 类似 关于
#!about、友情链接#!friend等等页面的注册。实现了首页的 URL 注册之后,我们要在打开网页时默认跳转到
home页。Q.js的启动,由Q.init函数实现。=在 init 的启动参数里面附带 index 参数,这样我们访问页面时就会默认打开
#!home如果觉得
#!home中的!不符合预期,这…也是可以改的~可以通过任意符合 URI 规范的字符串分割,甚至也可以设置为空。
文章页和翻页
文章页和首页不太一样、只有URL的一部分是相同的,需要通过URL中的不同部分区分不同文章页,不是默认打开页。
Q.js关键字模式时,参数之间通过/分割,请根据顺序进行 URL 规划注册之后访问页面
#!article/123即可触发article页面回调,并传入 参数1"123"翻页可文章页传值方式基本一致,在这里不重述
分类页
分类页其实和文章页很相似、只是参数一变成了分类名称,内容较多时需要传递下当前页码
依据上面的要求,我们依旧使用关键字注册模式,注册一个名为
category的 url 预设两个参数 分类唯一名称cstr,页码page访问
#!category/photo会传入photo到category的回调函数访问
#!category/photo/2会传入photo和2到category的回调函数参数二不存在时,需要在回调函数内进行处理~
导航条
有了这些 URL 之后,我们还需要一个导航条来提供页面之间的入口,
导航条需要在每次页面变更时修改导航条样式,指示当前打开的页面。
我们的 HTML 一般是这样的
CSS 一般是这样的
这时候我们需要在每次 URL 变更时,通过 JavaScript 动态修改 nav 中的
activeclass的位置,以修改样式。Q.js提供了Q.pop事件,可以通过注册Q.pop实现在每次 URL 变更时发生回调,Q.pop事件和其他 URL 事件不发生冲突,并在其他 URL 回调函数之前运行,请注意触发时机。注册和修改
Q.pop有多种途径。可以放在启动函数中注册,比如:也可以通过 关键字注册
甚至可以直接修改
Q.pop请注意,使用
Q.js请避免使用Q.js保留关键字为 URL 地址保留关键字包括:
reg,pop,go,V到这里,我们的简单的博客差不多就能用啦~
但是如果我们依旧想用保留关键字,用正则注册法是这样实现的
正则注册法需要在正则里指定可能传入的值
以上我们的博客URL规划基本就已经完成啦~
如何实现更加丰富的 url 格式
关键字注册法虽然方便,但仅仅支持 关键字/参数1/参数2/参数3 这种格式,想要实现更多不科学的 URL 格式,可以通过正则注册法~
比如视频网站的链接,由v开头后面跟数字ID的情况,预期必然会有参数一 并且为数字
这样访问
http://simple.com/#!v1234567就会传递值1234567给回调函数。我想在 JavaScript 里知道当前在哪个页面如何实现?
访问
Q.lash变量即可返回当前页面关键字如何通过JavaScript跳转到特定链接
因为在
Q.js中!关键字是可以被修改的,如果通过JavaScript实现URL跳转,可以调用q.go函数当然,大部分情况我们推荐使用 HTML 原生的 a 标签 link 通过访客触发,进行跳转
以上。
貌似实现不了追加拼接的URL。
比如:分类有多个的情况。
catgory1=a catgory2=b catgory3=c
能变成这样吗?
view?catgory1=a&catgory2=b&catgory3=c