前端路由详解编程语言

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

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; 
    }) 
}())

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/7514.html

(0)
上一篇 2021年7月18日
下一篇 2021年7月18日

相关推荐

发表回复

登录后才能评论