原生JS实现哈希路由
源码
使用Codepen在线体验和查看源码。
页面代码
在我们用前端框架的时候,经常用到路由技术,就是在地址栏确实发生了变化但是页面没有刷新,那么本文就介绍通过更改哈希的方式实现这样一种路由,下面是页面代码:
1 | <h1>Hash Router</h1> |
我们的目的是,当点击这些a标签的时候,下面id为view
的div
内容能够发生指定的变化; 同样,当第一次加载页面的时候,也需要根据地址判断用户想要访问哪个页面。
那么在正式开始之前,我把样式先给出来:
1 | * { |
哈,就是这么简单粗暴。
定义路由对象
为了更具有普遍性,我定义这里的component
属性为一个异步函数,它可以是一个AJAX请求,这里使用setTimeout
模拟一个请求:
1 | const routes = { |
那么接下来我们就该根据地址的不同来切换这几个页面了。
监听Hash变化
通过window.onhashchange
或者window.addEventListener('hashchange', () => {})
进行监听,这里选择第一种方式:
1 | window.onhashchange = function() { |
注意,直接用location.hash
得到的通常是以井号开头的字符串,比如:
但是如果说这个路径压根没有什么井号字符,它就会获得一个空字符串:
所以说为了避免这种情况,我们需要在页面加载时检测一下location.hash
:
1 | window.onload = function() { |
除此之外,这里还手动触发了一下onhashchange
,然后就可以在页面刚加载出来,就根据路径的不同更换指定的页面。
末尾再给出一个Codepen地址。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 喵喵小窝!