首页 > 其他分享 >基于hash的改变实现SPA

基于hash的改变实现SPA

时间:2023-03-14 18:22:37浏览次数:35  
标签:基于 hash const window 404 首页 SPA hashRouter

一、原理主要是通过window.onhashchange方法监听window.location.hash的改动

  1. 这里我直接用a元素来改变hash
  2. 通过设置dom节点的innerHTML,来实现页面切换
  3. hashRouter对象中使用'#404'进行兜底,保留一个带有href=""的a元素来回到首页
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hash Router Demo</title>
    <style>
        #root {
            text-align: center;
        }
        .comment {
            color: red;
        }
    </style>
</head>

<body>
    <div id="root">
        <div class="navbar">
            <a class="hashlink" href="">首页</a>
            <a class="hashlink" href="#article">文章</a>
            <a class="hashlink" href="#image">图片</a>
            <a class="hashlink" href="#comment">评论</a>
        </div>
        <div class="routerView">
            我是首页
        </div>
    </div>
    <script type="module">
        const hashRouter = {
            '#': `我是首页`,
            '#404': "<div>404 Not Found</div>",
            '#article': `<p>这是一个段落。</p>
                        <p>这是一个段落。</p>
                        <p>这是一个段落。</p>`,
            '#image': `<img src="https://www.runoob.com/images/logo.png" width="258" height="39" />`,
            '#comment': `<div class="comment">这是一条评论</div>`,
        };

        (function () {
            function onHashChange(){
                const currentHash = window.location.hash;
                const routerView = document.querySelector('.routerView');
                const template = hashRouter[currentHash] ?? hashRouter['#404'];
                routerView.innerHTML = template;
            }
            window.onhashchange = onHashChange;
        })();
    </script>
</body>

</html>

二、效果

  1. 开始
    image

  2. 点击文章
    image

  3. 点击图片
    image

  4. 点击评论
    image

  5. 点击首页
    image

标签:基于,hash,const,window,404,首页,SPA,hashRouter
From: https://www.cnblogs.com/pangqianjin/p/17215882.html

相关文章

  • Java容器之Hashtable源码分析
    一、概述Hashtable是一个比较古老的Map实现类,从它的名称就可以看得出来,因为没有遵循Java的语言规范。它和HashMap很像,同属于散列表,有以下特性:线程安全,这也估计算是唯一......
  • C - Make Takahashi Happy
    题目大意:左上角走到右下角,经过的路径权值连起来不能有重复,把没有重复的路径的条数加起来输出。我自己写的时候也磕磕绊绊,主要是自己模拟一边,理明白了就好了#include<ios......
  • TCPIP网络编程 -- (四)基于 TCP 的服务端客户端(1)
    TCP/IP网络编程--(四)基于TCP的服务端/客户端(1)4.2实现基于CP的服务器端/客户端等待连接请求阶段#include<sys/socket.h>intlisten(intsock,intbacklog);......
  • TCPIP网络编程 -- (五)基于 TCP 的服务端客户端(2)
    TCP/IP网络编程--(五)基于TCP的服务端/客户端(2)5.1回声服务器的完美实现由于上一章末尾提到的问题write(sock,message,strlen(message));str_len=read(sock,mess......
  • 基于交换机、智能网卡、光模块的400G数据中心网络解决方案
    400G数据中心网络市场发展迅猛,更大吞吐量的交换芯片、更高速率的光连接件、爆炸式的数据增长,在合力加速数据中心网络的发展。除此之外,随着5G的蓬勃发展和基于视频的数据传输......
  • Hashtable和Dictionary 的区别
    Hashtable和Dictionary都是.Net下的表示键值对的集合,那么我们在使用中该选择Hashtable还是Dictionary?下边我们看看他们之间的区别:1、Dictionary<K,V>在使用中是顺序存储的......
  • Paper Reading: Neural random subspace
    目录研究动机文章贡献神经随机子空间算法随机子空间方法NRS架构ExpansionAggregationCNN实现架构总结实验分析数据集ML数据集的结果超参数设置消融实验文档检索数据集计......
  • 基于jvm-sandbox的mock项目:iMock 实现过程遇到的问题及解决
    imock项目地址https://github.com/chufusheng/imock-web,作者很nice,中间沟通了很多次,感谢支持!!! 团队年度目标有一个搭建Mock平台任务,落到了我头上。1、首先明确团队的需......
  • DockQuery | 基于E-R图的数据建模功能使用实践
    DockQuery天狼最新版本已经发布,伙伴们有没有下载体验呢?与第一版相比,DockQuery1.2.0版本有许多更新,在页面和功能上都进行了完善。其中非常值得一提的是「数据建模」功能......
  • 面试官:怎么删除 HashMap 中的重复元素?第 3 种实现思路,99% 的人不会!
    背景大家好,我是栈长。前些天,栈长给大家分享了3篇实用的文章:带了一个3年的开发,不会循环删除List中的元素,我简直崩溃!!面试官:怎么去除List中的重复元素?我一行代码......