前端路由之 History路由原生完成

History路由的完成

history 完成路由重要依托两个API,行进或退却能够合营onpopstate事宜

  • history.pushState

    • 将当前URL和history.state加入到history中,并用新的state和URL替代当前,不会形成页面革新
    • state:与要跳转到的URL对应的状况信息
    • title:title
    • url:要跳转到的URL地点,不能跨域
    • pushState会向浏览器的汗青客栈增加一个url为设定值的纪录,并指向当前项
  • history.replaceState

    • 与pushState参数,寄义雷同
    • 区分在于replaceState是替代浏览器汗青客栈的当前汗青纪录为设定的url
    • replaceState不会修改浏览器汗青客栈的当前指向

代码(细致解释)

<ul>
    <li><a href="?name=red">A</a></li>
    <li><a href="?name=blue">B</a></li>
    <li><a href="?name=green">C</a></li>
</ul>
<div style='width: 100px; height: 100px;'></div>
<script>
    function setBackgroundColor(color) {
        document.querySelector('div').style.backgroundColor = color;
    }

    /**
     * [color description]
     * @type {String}
     * 1. data 参数
     * 2. title
     * 3. url
     */
    // 将页面替代成当前url的页面
    history.replaceState({
        color: 'red'
    }, '当前为A页面', "?name=a");
    setBackgroundColor("red");

    // 浏览器行进退却就会触发popstate事宜, 经由过程事宜的 state 能够获得参数值
    window.onpopstate = function (event) {
        // console.log(event.state);
        setBackgroundColor(event.state.color);
    }

    let aObj = document.querySelectorAll('a');
    aObj.forEach((item) => {
        item.addEventListener('click', function(event) {
            event.preventDefault();
            // 要求地点
            let query = this.href.split('?')[1];
            // 要求的参数值
            let color = query.split('=')[1];
            // history.state:猎取汗青栈中最顶端的state数据(即history.pushState中的第一个参数)
            if(history.state.color !== color) {
                setBackgroundColor(color);
                // 放入汗青纪录中
                history.pushState({color: color},color, location.href.split('?')[0] + '?' + query);
            }
        })
    })
</script>
    原文作者:Taste
    原文地址: https://segmentfault.com/a/1190000009921327
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞