1. 程式人生 > >隨手寫寫前端路由的簡單實現

隨手寫寫前端路由的簡單實現

前端路由主要有兩種實現方式

1、location.hash+hashchange事件。

2、history.pushState()+popstate事件。

第一種、location.hash+hashchange

這種方式的優勢就是瀏覽器相容性較好。

當頁面url地址發生改變時,location.hash獲取hash值,比如"www.xxx.com/#/home",location.hash的值為"#/home",如果是"www.xxx.com",location.hash則為空。hashchange事件監聽hash值,然後根據這個值來匹配設定好的路由規則。看程式碼

router.js

function Router(){
    //路由目錄
    this.routes = {};
    //當前url地址
    this.currentUrl = '';
    this.init();
}
//新增路由規則
Router.prototype.route = function(path, cb){
    //儲存path對應的回撥函式
    this.routes[path] = cb || function(){};
}
//路由重新整理
Router.prototype.refresh = function(){
    //獲取當前url的hash值
    this.currentUrl = location.hash.slice(1) || '/';
    console.log(this, this.currentUrl)
    //執行當前路由回撥函式
    this.routes[this.currentUrl] && this.routes[this.currentUrl]();
}
//視窗監視
Router.prototype.init = function(){
    //視窗監視hash變化事件,從而自動觸發該路由規則
    window.addEventListener('load', this.refresh.bind(this), false);
    window.addEventListener('hashchange', this.refresh.bind(this), false);
}

index.html

<a href="#/">首頁</a>
<a href="#/news">新聞頁</a>

<script>
        var router = new Router();
        router.route('/', function(){
            var div = document.querySelector('#content');
            div.innerHTML = '<h2>這是首頁</h2>';
        })
        router.route('/news', function(){
            var div = document.querySelector('#content');
            div.innerHTML = '<h2>這是新聞頁</h2>';
        })
</script>

相關推薦

隨手寫寫前端路由簡單實現

前端路由主要有兩種實現方式 1、location.hash+hashchange事件。 2、history.pushState()+popstate事件。 第一種、location.hash+hashchange 這種方式的優勢就是瀏覽器相容性較好。 當頁面url地

前端路由實現(二)

handle 因此 win 修改 etc ide span earch key HTML5History History interface是瀏覽器歷史記錄棧提供的接口,通過back(), forward(), go()等方法,我們可以讀取瀏覽器歷史記錄棧的信息,進行各種

前端路由實現(三) —— History的pushState和replaceState用法

最終 標簽 -c 歷史記錄 htm 操作 har PE 能夠 HTML5中history提供的pushState, replaceState這兩個API。它們提供了操作瀏覽器歷史棧的方法。 pushState能夠在不加載頁面的情況下改變瀏覽器的URL。這個方法接受三個參數

MRouter-Android路由簡單實現

路由的意義: 1. 模組間解耦,不能在程式碼中寫死Activity類名。 2. 動態配置業務需求,現在都是業務模組化開發了。 1. 註解 我們這次編寫的MRoute主要使用了編譯時註解技術,註解在我們日常使用的框架中都有體現。 執行

前端路由實現原理

什麼是前端路由? 路由的概念來源於服務端,在服務端中路由描述的是 URL 與處理函式之間的對映關係。 在 Web 前端單頁應用 SPA(Single Page Application)中,路由描述的是 URL 與 UI 之間的對映關係,這種對映是單向的,即 URL 變化引起 UI 更新(無需重新整理頁面)。

通過hash實現前端路由

pro ide location display htm 構造函數 獲取 init listen router.js //構造函數 function Router() { this.routes = {}; this.currentUrl = ‘‘; }

前端路由的兩種實現方式

color 前端路由 his 頁面 無刷新 原理 range window 使用 什麽是路由? 路由是根據不同的 url 地址展示不同的內容或頁面 早期的路由都是後端直接根據 url 來 reload 頁面實現的,即後端控制路由。 後來頁面越來越復雜,服務器壓力越來越大,隨

前端簡單實現校招筆試'作弊監聽'功能

end 樂視 系統 hidden 清除 sel 不可見 thead 可見 一、 監聽你的頁面活動 最近校招筆試如火如荼地開展。各種小心思都浮上來了:"我就查一道".小心翼翼按了一下tab切換(mac用三爪),Document.visibilityState開始工作了."監測

手摸手教你自己動手實現一個前端路由

前言 用過現代前端框架的同學,對前端路由一定不陌生, vue, react, angular 都有自己的 router, 那麼你對 router 的工作原理了解嗎? 如果還不瞭解, 那麼請跟我一起來手寫一個簡單的前端路由, 順便了解一下. 實現路由的2種方式 hash模式

簡單實現前端選擇上傳圖片並顯示略縮圖

效果 實現程式碼 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>修改資訊</title> <sc

HTML5中history物件解析及前端路由實現封裝流程

HTML5 history新增了兩個API:history.pushState和history.replaceState 兩個Api都接收三個引數: 語法: window.history.pushState(state Object, title, URL); window.hist

自己動手實現一個前端路由

單頁面應用利用了JavaScript動態變換網頁內容,避免了頁面過載,提供了流暢的使用者體驗;路由則提供了瀏覽器地址變化,網頁內容也跟隨變化,兩者結合起來則為我們提供了體驗良好的單頁面web應用 前端路由實現方式 前端路由需要實現三個功能:①瀏覽器地址變化,切換頁面;②點選瀏覽器【後退】、【前進

vue-router 原始碼實現前端路由的兩種方式

在學習 vue-router 的程式碼之前,先來簡單瞭解一下前端路由。 前端路由主要有兩種實現方法: Hash 路由 History 路由 先來看看這兩種方法的實現原理。 接著我們將用它們來簡單實現一個自己的前端路由。 前端路由 Hash 路由 u

JFinal框架學習------整合bootstrap前端框架,實現簡單的增刪改查功能

   Bootstrap,來自 Twitter,是目前最受歡迎的前端框架。Bootstrap 是基於 HTML、CSS、JAVASCRIPT 的,它簡潔靈活,使得 Web 開發更加快捷。 一、JFinal整合bootstrap   1.下載bootstra

vue 單頁應用(spa)前端路由實現原理

寫在前面:通常 SPA 中前端路由有2種實現方式: window.history location.hash 下面就來介紹下這兩種方式具體怎麼實現的 一.history 1.history基本介紹 window.history 物件包含瀏覽器的

[轉載]從原始碼的角度分析vue-router前端路由兩種實現方式

本文由淺入深觀摩vue-router原始碼是如何通過hash與History interface兩種方式實現前端路由,介紹了相關原理,並對比了兩種方式的優缺點與注意事項。最後分析瞭如何實現可以直接從檔案系統載入而不借助後端伺服器的Vue單頁應用。隨著前端應用的

談談前端JavaScript 型別判斷typeof和instanceof的區別及一個型別判斷Util的簡單實現

  instanceof和typeof運算子都能用來判斷一個變數是否為空或是什麼型別。typeof用以獲取一個變數的型別,typeof一般只能返回如下幾個結果果:number, boolean, string, function, object, undefin

Web開發中 前端路由 實現的幾種方式和適用場景

故事從名叫Oliver的綠箭蝦`說起,這位大蝦酷愛社交網站,一天他打開了 Twitter ,從發過的tweets的選項卡一路切到followers選項卡,Oliver發現頁面的內容變化了,URL也變化了,但為什麼頁面沒有閃爍重新整理呢?於是Oliver開啟的網路監控器(沒錯,Oliver是個程式設計師),他驚

so easy 前端簡單實現多語言

前言其實現在開發者解決多語言普遍三種解決方案:第一個是為每個頁面提供每種語言的相關頁面。第二種是把內容從表現形式中分離出來,做不同語言的內容檔案。第三種是動態翻譯頁面內容。第三種很少見,而且機器翻譯技術還很難達到人們的預期。其實第二種相對來說簡單一點,那麼開搞。實現思考翻譯公

JS單頁面應用實現前端路由(hash)

背景介紹 用了許多前端框架來做spa應用,比如說backbone,angular,vue他們都有各自的路由系統,管理著前端的每一個頁面切換,想要理解其中路由的實現,最好的方法就是手動實現一個。 前端路由有2種實現方式,一種是html5推出的historya