前端路由

2018-06-24 01:26:25来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

前端路由的两种实现方式:

1. location.hash + hashchange

function Router(){
    this.curUrl = '';
    this.routes  = {};
}
Router.prototype = {
    route(path, callback){
        this.routes[path] = callback || function(){}
    },
    refresh(){
        this.curUrl = location.hash.slice(1) || '';
        this.routes[this.curUrl]();
    },
    init(){
        window.addEventListener('load', this.refresh.bind(this), false);
        window.addEventListener('hashchange', this.refresh.bind(this), false);
    }
}

// 实例
var r = new Router();
r.init();
function changecolor(color){
  var body = document.getElementsByTagName('body')[0];
  body.style['background'] = color;
}
r.route('/',changecolor.bind(null,'#aaa'));

 

2. history API

    pushState(state, title, url)添加记录,replaceState修改记录,popState(只有在前进后退时触发)

(function(){
    var a = document.getElementById('a');
    var b = document.getElementById('b');
    var c1 = 0;
    var c2 = 0;
    history.replaceState({c1:c1,c2:c2},null,'');
    a.addEventListener('click',function(){
        c1++;        
        history.pushState({c1:c1,c2:c2},null,'#/a'+c1);
        a.innerHTML = 'a'+c1;
    })
    b.addEventListener('click',function(){
        c2++;
        history.pushState({c1:c1,c2:c2},null,'#/b'+c2);
        b.innerHTML = 'b'+c2;
    })
    window.addEventListener('popstate',function(e){
        console.log(e.state);
        a.innerHTML = 'a'+e.state.c1;
        b.innerHTML = 'b'+e.state.c2;
    })
}())

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:从零开始学习前端JAVASCRIPT — 6、JavaScript基础DOM

下一篇:angularjs1学习笔记--持续更新