hash

class HashRouter {
    constructor(){
        //hash --- > callback
        this.routes={};
        // this.routes = {
        //   '/home':fn1,
        //   '/news':fn2
        // };
        this.currentHash=''; //保存当前的hash
        // var _this = this; //第一种方式
        // window.addEventListener('hashchange',function(){
        //     console.log('kkkk');
        //     _this.hashChangeUrl();
        // },false);

        //第二种方式:
        //  window.addEventListener('hashchange',this.hashChangeUrl.bind(this),false);

        //第三种方式箭头函数
        window.addEventListener('hashchange',()=>{
            this.hashChangeUrl();
        },false);
        // false :冒泡

        //页面加载的事件
        window.addEventListener('load',()=>{
            this.hashChangeUrl();
        },false)
    }
    //path路径和callback函数对应起来
    route(path,callback) {
        this.routes[path] = callback;
    }
    hashChangeUrl(){
        
        //获取当前hash 
        // location.hash 获取的值为:"#/a, 因此 location.hash.slice(1) = '/a' 这样的
        this.currentHash = location.hash.slice(1);

        //当前hash所对应的回调函数
        this.routes[this.currentHash](this.currentHash);
    } 
}

var router = new HashRouter();
const body = document.querySelector('body');

function changeColor(color,html,data){
    
    body.style.backgroundColor=color;
    var activedM = mainMenu.querySelector('a.active');
    activedM && activedM.classList.remove('active');
    mainMenu.querySelector(`a[href="#${data}"]`).classList.add('active');
    content.innerHTML = html;

}
router.route('/',function(data){
    changeColor('red',`<div>我是首页 <p>测试</p></div>`,data);
})
router.route('/home',function(data){
    changeColor('red',`<div>我是首页 <p>测试</p></div>`,data);
})
router.route('/news',function(data){
    changeColor('green',`<div>我是新闻页 <p>测试2</p></div>`,data);
})
router.route('/product',function(data){
    changeColor('blue',`<div>我是产品页 <p>测试3</p></div>`,data);
})
posted @ 2020-04-03 19:48  lanyan  阅读(235)  评论(0编辑  收藏  举报