hash和histroy路由

文章探讨了在单页应用(SPA)中如何利用HTML锚点进行页面内部导航,并展示了使用HistoryAPI改变地址栏并管理浏览历史的方法。通过点击事件监听hashchange和popstate事件,实现页面内容动态更新。
摘要由CSDN通过智能技术生成
<div>
    <a href="#cat">跳到锚点</a>
    <br />
    <a href="http://www.baidu.com">百度</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <a href="">障碍物</a> <br />
    <pre id="cat">
        ლ(′◉❥◉`ლ)
    </pre>
    <hr>
    <a href="#a">锚点a</a>
    <a href="#b">锚点b</a>
    <a href="#c">锚点c</a>
    <a href="#d">锚点d</a>
    <div id="view"></div>
</div>

<script>
    function showByAnchorPoint() {
        let hashVal = location.hash.substring(1);
        view.innerHTML = `<button>我是${hashVal.toUpperCase()}组件</button>`;
    }
    // 加载好之后显示初始内容
    window.onload = showByAnchorPoint;
    // 监视
    window.addEventListener('hashchange', e => {
        console.log(location.hash, '改变的锚点值');
        showByAnchorPoint();
    })


</script>
histroy Document 我是history页面
<a href="javascript:void(0)" id="btn1">跳到abc</a>
<a href="javascript:void(0)" id="btn2">跳到xxx</a>

<div id="view"></div>




<script>
     function showByAnchorPoint() {
        let pathname = location.pathname;
        console.log(pathname,history.state);
        view.innerHTML = `<button>我是${pathname.toUpperCase()}组件</button>`;
    }
    btn1.onclick = function(){
        // 改变地址栏  HTML5 historyAPI
        history.pushState({data:'123a'},'','/abc');
        showByAnchorPoint();    
    }
    btn2.onclick = function(){
        // 改变地址栏  HTML5 historyAPI
        history.pushState({data:'123x'},'','/xxx');
        showByAnchorPoint();    
    }
    // 当前进或后退,能切换页面的内容
    window.addEventListener('popstate',e=>{
        showByAnchorPoint()
    })
    window.onload = function(){
        // 获取地址栏url
        showByAnchorPoint();
    }
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值