Hash路由

2020-03-13  本文已影响0人  废弃的种子
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--路由:在不发送HTTP请求的情况下对页面进行刷新-->
<!--hash:页面中hash的变化不会发送http请求,我们可以根据hash值的变化来实现路由功能-->
<ul class="list">
    <li><a href="#/red">红</a></li>
    <li><a href="#/green">绿</a></li>
    <li><a href="#/blue">蓝</a></li>
</ul>
<script>
    class Route{
        constructor(){
            this.route={};
            this.currentUrl='';
            //在对象创建的时候就监听hash值的变化,防止hash变化但是没有捕捉到
            window.addEventListener('hashchange',this.refresh.bind(this),false);
        }
        router(path,callback){
            this.route[path]=callback || function () {};
        }
        //定义refresh方法,监测页面变化,对页面进行刷新
        //1、保存当前页面的hash值
        //2、根据hash值,去执行route对象保存的路由信息
        refresh(){
            let hash=location.hash.slice(1);
            console.log(hash);
            //根据hash值去执行route中的路由信息
            this.route[hash]();
        }
    }

    let list=document.querySelector(".list")
    let Router=new Route();


    Router.router('/red',function () {
        list.style.background='red';
    });
    Router.router('/green',function () {
        list.style.background='green';
    });
    Router.router('/blue',function () {
        list.style.background='blue';
    });


</script>


</body>

</html>
上一篇下一篇

猜你喜欢

热点阅读