前端路由

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

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

原文地址:https://www.cnblogs.com/colima/p/8335591.html

时间: 2024-11-05 10:20:27

前端路由的相关文章

利用JS实现前端路由

在以前的web程序中,路由字眼只出现在后台中.但是随着SPA单页面程序的发展,便出现了前端路由一说.单页面顾名思义就是一个网站只有一个html页面,但是点击不同的导航显示不同的内容,对应的url也会发生变化,这就是前端路由做的事.也就是通过JS实时检测url的变化,从而改变显示的内容. 目前很多前端框架都有接口去实现路由,比如vuejs的vue-route等.我们可以利用原生的hashchange事件来模拟一个简单的路由. 实例的html代码: Document index news about

Web开发中 前端路由 实现的几种方式和适用场景

浅析Web开发中前端路由实现的几种方式 主题 Web开发 故事从名叫Oliver的绿箭虾`说起,这位大虾酷爱社交网站,一天他打开了 Twitter ,从发过的tweets的选项卡一路切到followers选项卡,Oliver发现页面的内容变化了,URL也变化了,但为什么页面没有闪烁刷新呢?于是Oliver打开的网络监控器(没错,Oliver是个程序员),他惊讶地发现在切换选项卡时,只有几个XHR请求发生,但页面的URL却在对应着变化,这让Oliver不得不去思考这一机制的原因- 叙事体故事讲完,

自己动手写一个前端路由插件

在单页应用上,前端路由并不陌生.单页应用是指在浏览器中运行的应用,在使用期间页面不会重新加载.       基本原理:以 hash 形式(也可以使用 History API 来处理)为例,当 url 的 hash 发生改变时,触发 hashchange 注册的回调,回调中去进行不同的操作,进行不同的内容的展示.       基于hash的前端路由优点是:能兼容低版本的浏览器. history 是 HTML5 才有的新 API,可以用来操作浏览器的 session history (会话历史). 

前端路由和后端路由

前端路由的典型:ng-route,后端路由典型:express (结合模板,返回的是html文件,感觉模板略像jsp,没有分离) 前端路由根据不同的url展示页面,服务端根据 url 的不同返回不同的页面实现的.在单页面应用,大部分页面结构不变,只改变部分内容的使用 优点 用户体验好,不需要每次都从服务器全部获取,快速展现给用户 缺点 使用浏览器的前进,后退键的时候会重新发送请求,没有合理地利用缓存 单页面无法记住之前滚动的位置,无法在前进,后退的时候记住滚动的位置 由于单页Web应用在一个页面

原生JS实现一个简单的前端路由(原理)

说一下前端路由实现的简要原理,以 hash 形式(也可以使用 History API 来处理)为例, 当 url 的 hash 发生变化时,触发 hashchange 注册的回调,回调中去进行不同的操作,进行不同的内容的展示. 直接看代码或许更直观. 1 function Router() { 2 this.routes = {}; 3 this.currentUrl = ''; 4 } 5 Router.prototype.route = function(path, callback) {

浅析Web开发中前端路由实现的几种方式

故事从名叫Oliver的绿箭虾`说起,这位大虾酷爱社交网站,一天他打开了 Twitter ,从发过的tweets的选项卡一路切到followers选项卡,Oliver发现页面的内容变化了,URL也变化了,但为什么页面没有闪烁刷新呢?于是Oliver打开的网络监控器(没错,Oliver是个程序员),他惊讶地发现在切换选项卡时,只有几个XHR请求发生,但页面的URL却在对应着变化,这让Oliver不得不去思考这一机制的原因… 叙事体故事讲完,进入正题.首先,我们知道传统而经典的Web开发中,服务器端

前端路由的原理

什么是路由?简单的说,路由是根据不同的 url 地址展示不同的内容或页面 使用场景?前端路由更多用在单页应用上, 也就是SPA, 因为单页应用, 基本上都是前后端分离的, 后端自然也就不会给前端提供路由. 前端的路由和后端的路由在实现技术上不一样,但是原理都是一样的.在 HTML5 的 history API 出现之前,前端的路由都是通过 hash 来实现的,hash 能兼容低版本的浏览器. 两种实现前端路由的方式HTML5 History两个新增的API:history.pushState 和

通过hash实现前端路由

router.js //构造函数 function Router() { this.routes = {}; this.currentUrl = ''; } Router.prototype.route = function(path, callback) { this.routes[path] = callback || function(){};//给不同的hash设置不同的回调函数 }; Router.prototype.refresh = function() { //console.l

原生 js前端路由系统实现1

在看了百度手机小说网站源码之后  突然兴起想自己实现一个基于网页hash技术的路由系统 源码 我放到oscgit上面了 地址: https://git.oschina.net/diqye/route.js 适用场景: 局部刷新页面    通过ajax局部刷新页面会有一个问题就是 分享url或者刷新页面时不能记录 当前网页的状态  前端路由可解决这个问题 期望的路由: 1  当访问网页 http://localhost/index.html 或者 http://localhost/index.ht

前端路由 or 后端路由

关于这个问题,无论是平时工作中,还是业余学习中,都有过思考.到底什么样的项目适合前端路由,什么样的项目适合后端路由?可能我目前的想法还很稚嫩不成熟,欢迎吐槽. 首先需要明确的是,无论前端还是后端路由,我们看到的 URL 都是马甲,需要通过路由触发/执行真实需要执行的逻辑路径. 先说前端路由,很重要的一点是 页面不刷新,和后端采用 ajax 交互,实际生产中多用在 单页应用 中.举个例子,webapp 一类就比较适合用前端路由,页面不刷新使得交互友好(毕竟移动端请求还是挺耗时的),另外,单页应用通