美文网首页
利用pushState实现单页路由

利用pushState实现单页路由

作者: 瓜田猹 | 来源:发表于2018-02-06 16:57 被阅读18次

    由于history提供的pushState, replaceState可以改变url,同时保持浏览器不刷新,并且通过popstate监听浏览器历史记录的方式,完成一系列的异步动作。

    <body>
            <a data-href="/home">首页</a>
            <a data-href="/my">我的</a>
            <script type="text/javascript">
                //定义路由数组
                const Router = [];
                
                //添加路由方法
                const addRoute = (path = '',handle = () => {}) => {
                    let obj = {
                        path,
                        handle
                    }
                    Router.push(obj)
                }
            
                //添加路由定义
                addRoute('/my',function(){  
                    console.log("我的")
                })
        
                addRoute('/home',function(){
                    console.log("首页")
                })
                
               //路由处理函数
                const routeHandle = (path) => {
                    Router.forEach((item,index)=>{
                        if(item.path == path){
                            history.pushState(null, null, "#"+path);
                            item.handle.apply(null, [path]);
                            return true;
                        }
                    })
                    return false;
                }
                
                //点击a标签传递参数
                document.addEventListener("click",function(e){
                    var path = e.target.dataset.href;
                    if(path){
                        if(routeHandle(path)) {
                            //阻止默认行为
                            e.preventDefault();
                        }
                    }       
                })
            </script>
        </body>
    

    相关文章

      网友评论

          本文标题:利用pushState实现单页路由

          本文链接:https://www.haomeiwen.com/subject/omggzxtx.html