利用JS實現前端路由


在以前的web程序中,路由字眼只出現在后台中。但是隨着SPA單頁面程序的發展,便出現了前端路由一說。單頁面顧名思義就是一個網站只有一個html頁面,但是點擊不同的導航顯示不同的內容,對應的url也會發生變化,這就是前端路由做的事。也就是通過JS實時檢測url的變化,從而改變顯示的內容。

目前很多前端框架都有接口去實現路由,比如vuejs的vue-route等。我們可以利用原生的hashchange事件來模擬一個簡單的路由。

 

實例的html代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .content{
            position:absolute;
            left: 0px;
            top:0px;
            display: none;
        }
        .content:nth-child(1){
            display: block;
        }
    </style>
    <script src="js/jquery-2.2.1.min.js"></script>
</head>
<body>
    <div id="index-page" class="content">
        <ul>
            <li><a href="#/index">index</a></li>
            <li><a href="#/news">news</a></li>
            <li><a href="#/about">about</a></li>
        </ul>
    </div>

    <div id="news-page" class="content">
        <h1>this is new page</h1>
        <a href="#/index">back</a>
    </div>

    <div id="about-page" class="content">
        <h1>this is about page</h1>
        <a href="#/index">back</a>
    </div>

    <script src="js/bundle.js"></script>

</body>
</html>

 

實例的javascript代碼:

function Router(){
    this.routes={};
    this.currentURL='';
}

Router.prototype.route = function(path,callback){
    this.routes[path] = callback || function(){};
}

Router.prototype.refresh = function(){
    this.currentURL = location.hash.slice(1) || '/index';
    this.routes[this.currentURL]();
}

Router.prototype.init = function () {
    window.addEventListener('load',this.refresh.bind(this),false);
    window.addEventListener('hashchange',this.refresh.bind(this),false);
}

function display_page(id){

    $(".content").eq(id).show().siblings().hide();
}

window.Router = new Router();

Router.route('/index',function(){
    display_page(0);
})

Router.route('/news',function(){
    display_page(1);
})

Router.route('/about',function(){
    display_page(2);
})

window.Router.init();


  1. Router是一個路由類,類屬性routes是一個路由映射對象,currentURL表示當前的URL
  2. 類函數route表示為對應的url指定視圖函數,refresh函數為刷新頁面函數
  3. 為window綁定監聽函數,其中主要綁定hashchang,以檢測到hash值變了,馬上刷新頁面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM