zoukankan      html  css  js  c++  java
  • 简易基础版单页面应用

    写在开头:

    在网上看到一篇介绍实现简易基础版单页面应用的分享,贴上原地址:  
    [https://segmentfault.com/a/1190000003786176](https://segmentfault.com/a/1190000003786176)。
    先是跟着文章中一步步实现,后面又加上了一些自己想法。
    

    基础代码

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>demo</title>
    </head>
    <body>
        <div id="app">
            <nav id="nav"></nav>
            <div id="container"></div>
        </div>
        <script type="text/javascript" src="js/jQuery.js"></script>
        <script type="text/javascript" src="js/app.js"></script>
    </body>
    </html>
    

    app.js

    var $nav = $("#nav");
    var sLi = ["home", "about", "article", "history"].reduce(function(pre, n) {
        return pre + "<li><a href='/" + n + "'>" + n + "</a></li>";
    }, "");
    var sUl = "<ul>" + sLi + "</ul>";
    $nav.html(sUl);
    
    var $container = $("#container");
    $("#nav ul li").on("click", function() {
        var route = $(this).find("a").text();
        history.pushState({ title: route }, route, route);
        show();
        return false;
    });
    
    function show() {
        var route = window.location.pathname;
        if (route === "/home" || route === "/") {
            $.get("/api/home", function(data) {
                $container.html(data.join("") + "!");
            });
        } else {
            $container.html("这是" + route + "区域哦");
        }
    }
    show();
    window.addEventListener("popstate", show);
    

    test.json

    {
        "lis": ["今", "天", "是", "个", "好", "天", "气"]
    }
    

    发现问题

        当地址栏的地址为:[http://127.0.0.1:8011/home]或者其他的时候刷新页面,页面显示404。因为我并没有home.html。所以对app.js做了一些调整
    
    var $nav = $("#nav");
    var sLi = ["home", "about", "article", "history"].reduce(function(pre, n) {
        return pre + "<li><a href='/" + n + "'>" + n + "</a></li>";
    }, "");
    var sUl = "<ul>" + sLi + "</ul>";
    $nav.html(sUl);
    
    var $container = $("#container");
    $("#nav ul li").on("click", function() {
        var route = $(this).find("a").text();
        history.pushState({ title: route }, null, "#/" + route);
        show();
        return false;
    });
    
    function show() {
        var route = window.location.hash;
        if (route === "#/home" || route === "" || route === "#/") {
            $.get("data/test.json", function(data) {
                $container.html(data.lis.join("") + "!");
            });
        } else {
            $container.html("这是" + route + "区域哦");
        }
    }
    show();
    window.addEventListener("popstate", show);
    
    

    分析修改内容

    1. history.pushState({ title: route }, null, "#/" + route);
       把地址改为"/#/XXX"。这是参考网易云音乐的pc网站,加了“#”,刷新的就是当前页面。
    
    2. var route = window.location.hash;
       地址改为"/#/XXX"之后,window.location.pathname获取得到的全部都是"/",window.location.hash获取的是"#/XXX"
    
  • 相关阅读:
    用Webshell直接杀入内网
    别再说找不到Python练手项目了,这80个拿去过冬
    亲爱的,我是一条Linux运维技术学习路径呀。
    一份C++学习资源,咬牙切齿地好用呀
    技术变现,到底怎么变?本文或能成为你的“点金石”
    40个大数据学习资源,个个是干货,最后7个太给力
    零基础如何学好数据分析?
    8个程序员专用软件/网站,个个是神器,第一个最惊喜......
    如何写一个优秀的GitHub项目README文档?
    超全PHP学习资源整理:入门到进阶系列
  • 原文地址:https://www.cnblogs.com/my93/p/5694697.html
Copyright © 2011-2022 走看看