vue-router的实现原理hash和history

首先实现原理有两个要求:1.无刷新 2.切换内容

1.hash 通过window监听hash值变化从而改变页面的内容 点击页面退后前进也能成功渲染

<body>
    <a href="#/home">首页</a>
    <a href="#/center">个人中心</a>
    <h1 id="h1"></h1>
    <script>
        //1.无刷新 2.内容的切换
        //1.监听hash值的变化 因为hash是一个标记不会改变页面的刷新
        window.addEventListener('hashchange', function (e) {
            // 获取hash值
            let hash = location.hash
            console.log(hash);
            // 通过哈希值渲染出对应的内容
            if (hash === "#/home" || hash === "") {
                document.getElementById("h1").innerHTML = "首页"
            } else if (hash === "#/center") {
                document.getElementById("h1").innerHTML = "个人中心"
            }
        })
    </script>
</body>

2.history 通过绑定click事件传入url,函数中使用history.pushState(这是HTML5中的一个方法,允许开发者通过JavaScript向浏览器的历史记录中添加一条新的状态(state)。它接受三个参数:state对象、页面标题和URL。)

<body>
    <h1>history</h1>
    <button onclick="jump('/home')">home</button>
    <button onclick="jump('/center')">center</button>
    <h1 id="content"></h1>


    <script>
        //1.无刷新 2.内容的切换
        // history 
        // 做到这一步当我们点击是可以跳转的内容也不更新但是点击上一步下一步url会变但是页面不会变
        function jump(url) {
            history.pushState({ page: url }, "标题1111", url)
            if (url === '/home') {
                document.getElementById("content").innerHTML = "首页"
            } else if (url === '/center') {
                document.getElementById("content").innerHTML = "个人中心"
            }
        }


        // 监听popstate
        // 监听我们history.pushState({ page: url }) 点击上一步下一步渲染
        window.addEventListener('popstate', function (e) {
            console.log(e.state.page);
            // let page = e.state.page
            if (e.state.page == '/home') {
                document.getElementById("content").innerHTML = "首页"
            } else if (e.state.page == '/center') {
                document.getElementById("content").innerHTML = "个人中心"
            }
        });
    </script>
</body>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值