前端路由解析(一) —— hash路由

简介: 前端路由解析(一) —— hash路由

640.jpg

写在前面


现在的前端应用很多都是单页应用。路由对于单页应用来说,是一个重要的组成部分。本系列文章将讲解前端路由的实现原理。这是系列文章的第一篇:hash路由。


hash


首先来说一说什么是hash。我们经常能看到这种url:


1、https://www.baidu.com/#1232、https://www.baidu.com/#234


url后面的#/123,就是hash值,可以通过下面的代码来获取:


window.location.hash// #123// #234


hash最初是用来进行页面快速定位的,当页面很长的时候,是很有用的,比如下面的例子:


<header>  <a href='#p1'>前往段落1</a>  <a href='#p2'>前往段落2</a>  <a href='#p3'>前往段落3</a></header><main>  <p id='p1'>11111111111111111111111111</p>  <p id='p2'>22222222222222222222222222</p>  <p id='p3'>33333333333333333333333333</p></main>


假设我们的三个</p>上下间距很大,点击最上面的</a>标签,可以迅速定位到对应的段落。像下面这样:


640.gif

我们也可以用过代码来控制hash值,同样可以达到定位的效果,比如:


window.location.hash = '#p2'


hash路由


当页面的hash值变化时,是可以监听到的:


window.addEventListener('hashchange', e => {    console.log(e); // HashChangeEvent     const oldUrl = e.oldURL; // 旧的页面地址    const newUrl = e.newURL; // 新的页面地址    const type = e.type // hashchange - 事件类型    const cancelable = e.cancelable; // false - 表示该事件无法取消。即无法通过e.preventDefault()阻止hash跳转});


hash路由就是利用了hash值变化可监听这一点来实现的。我们来实现一个最最简单的:


<body>    <header>        <a href='#p1'>前往段落1</a>        <a href='#p2'>前往段落2</a>        <a href='#p3'>前往段落3</a>    </header>    <main>        <div id="content">            这是首页        </div>    </main>    <script>        const routerMap = {            'p1': () => { document.getElementById('content').innerHTML = '这是段落1的内容' },            'p2': () => { document.getElementById('content').innerHTML = '这是段落2的内容' },            'p3': () => { document.getElementById('content').innerHTML = '这是段落3的内容' },        }        const handleRouter = e => {            const newURL = e && e.newURL || window.location.href;            const newHash = newURL.split('#').pop();            typeof routerMap[newHash] === 'function' && routerMap[newHash]();        };        window.addEventListener('hashchange', handleRouter);        window.addEventListener('load', handleRouter);</script></body>


最终的效果如下图所示:

640.gif



hash路由的兼容性很不错,可以兼容到IE8。并且,hash路由完全由前端就可以实现。


写在后面


本文解析了前端的hash,以及hash路由的实现原理,符合预期。其实很多看起来强大的功能,底层的原理其实很简单。后续会解析另一种常用的路由方式:history路由。


另外,一些我们平时不常用的api等,或许可以做很多事情。比如我之前这篇文章里讲的:


你可能不知道的LocalStorage用法

相关文章
|
存储 前端开发 安全
前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
本文全面解析前端三种数据存储方式:Cookie、LocalStorage与SessionStorage。涵盖其定义、使用方法、生命周期、优缺点及典型应用场景,帮助开发者根据登录状态、用户偏好、会话控制等需求,选择合适的存储方案,提升Web应用的性能与安全性。(238字)
1169 0
|
12月前
|
Web App开发 前端开发 JavaScript
前端性能优化利器:图片懒加载实战解析
前端性能优化利器:图片懒加载实战解析
|
存储 前端开发 JavaScript
调用DeepSeek API增强版纯前端实现方案,支持文件上传和内容解析功能
本方案基于DeepSeek API增强版,提供纯前端实现的文件上传与内容解析功能。通过HTML和JavaScript,用户可选择文件并调用API完成上传及解析操作。方案支持多种文件格式(如PDF、TXT、DOCX),具备简化架构、提高响应速度和增强安全性等优势。示例代码展示了文件上传、内容解析及结果展示的完整流程,适合快速构建高效Web应用。开发者可根据需求扩展功能,满足多样化场景要求。
4088 64
|
存储 前端开发 JavaScript
|
11月前
|
人工智能 JSON 前端开发
如何解决后端Agent和前端UI之间的交互问题?——解析AG-UI协议的神奇作用
三桥君指出AG-UI协议通过SSE技术实现智能体与前端UI的标准化交互,解决流式传输、实时进度显示、数据同步等开发痛点。其核心功能包括结构化事件流、多Agent任务交接和用户中断处理,具有"一次开发到处兼容"、"UI灵活可扩展"等优势。智能体专家三桥君认为协议将AI应用从聊天工具升级为实用软件,适用于代码生成、多步骤工作流等场景,显著提升开发效率和用户体验。
2551 0
|
JSON 前端开发 安全
前端开发中常用的鉴权方式解析与实践要点
本文深入探讨了前端开发中常用的鉴权方式,包括HTTP基本鉴权、Session-Cookie鉴权、Token验证、JWT(JSON Web Tokens)、单点登录(SSO)和OAuth等。文章首先明确了认证、授权、鉴权和权限控制的概念及关系,随后详细解析每种鉴权方式的工作原理、优缺点及适用场景。例如,HTTP基本鉴权简单但安全性低,适合内部网络;Session-Cookie鉴权易受CSRF攻击,适用于同域Web应用;Token和JWT无状态且扩展性好,适合分布式系统;SSO提升用户体验,适用于多系统统一登录;OAuth安全方便,适合第三方授权接入。
1343 2
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
989 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
移动开发 缓存 前端开发
深入理解前端路由:原理、实现与应用
本书《深入理解前端路由:原理、实现与应用》全面解析了前端路由的核心概念、工作原理及其实现方法,结合实际案例探讨了其在现代Web应用中的广泛应用,适合前端开发者和相关技术人员阅读。
|
负载均衡 网络协议 定位技术
在数字化时代,利用DNS实现地理位置路由成为提升用户体验的有效策略
在数字化时代,利用DNS实现地理位置路由成为提升用户体验的有效策略。通过解析用户请求的来源IP地址,DNS服务器可判断其地理位置,并返回最近或最合适的服务器IP,从而优化网络路由,减少延迟,提高访问速度。示例代码展示了如何基于IP地址判断地理位置并分配相应服务器IP,实际应用中需结合专业地理数据库和动态调整机制,以应对复杂网络环境带来的挑战。
455 6
|
机器学习/深度学习 编解码 前端开发
探索无界:前端开发中的响应式设计深度解析####
【10月更文挑战第29天】 在当今数字化时代,用户体验的优化已成为网站与应用成功的关键。本文旨在深入探讨响应式设计的核心理念、技术实现及最佳实践,揭示其如何颠覆传统布局限制,实现跨设备无缝对接,从而提升用户满意度和访问量。通过剖析响应式设计的精髓,我们将一同见证其在现代Web开发中的重要地位与未来趋势。 ####
383 7

推荐镜像

更多
  • DNS