• 单页面实现之hash


    至学了angularJs后,发现这个单页面应用不知道在没有angularJs的情况下怎么实现。

    所以就此对这个思考与资料并行,终于知道这个的实现基本原理。

    首先angularJs的实现是hash值的变化,就是url#后的内容,但angularJs是对其进行了处理的,所以

    观察不到#这个值,然后是每次点击导航都会转换页面,angularJs是在一个类名是ng-view的div容器中实现的。

    所以angularJs是删除类名为ng-view里的内容后添加内容,那我们是不是可以简单的,显示和隐藏内容呢?

    所以就是动手实现。

    代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>hash深入</title>
        <style>
        html,body{
            width: 100%;
            height: 100%;
        }
        *{
            margin: 0;
            padding: 0;
        }
        ul{
            overflow: hidden;
            list-style: none;
        }
        ul li{
            float: left;
            margin-left: 10px;
        }
        .div{
            display: none;
            width: 100%;
            height: 100%;
        }
        .div1{
            background: red;
        }
        .div2{
            background: blue;
        }
        .div3{
            background: pink;
        }
        .div4{
            background: skyblue;
        }
        </style>
    </head>
    <body>
    <!-- 需要自定义属性来实现关联 -->
        <ul>
            <li><a href="javascript:;" data-hash="one">首页</a></li>
            <li><a href="javascript:;" data-hash="two">页面一</a></li>
            <li><a href="javascript:;" data-hash="three">页面二</a></li>
            <li><a href="javascript:;" data-hash="four">页面三</a></li>
        </ul>
        <div class="div1 div" data-hash="one">首页</div>
        <div class="div2 div" data-hash="two">页面二</div>
        <div class="div3 div" data-hash="three">页面三</div>
        <div class="div4 div" data-hash="four">页面四</div>
        <script>
            var aNav=document.querySelectorAll("ul li a");
            var aPage=document.querySelectorAll(".div");
            for(var i=0;i<aNav.length;i++){
                aNav[i].onclick=function(){
                    // dataset获取自定义属性
                        hash=this.dataset.hash;
                        for(var i=0;i<aPage.length;i++){
                            if(hash==aPage[i].dataset.hash){
                                // 显示匹配的页面
                                aPage[i].style.display="block";
                                // 改变url路径的hash
                                window.location.hash=hash;
                            }else{
                                // 隐藏其他页面
                                aPage[i].style.display="none";
                            }
                        }
                    }
            }
            // 因刷新等有hash但不能显示目标页面而实现目标的显示
            refresh();
            function refresh(){
                var currentHash=window.location.hash.substr(1) || "one";
                for(var i=0;i<aPage.length;i++){
                            if(currentHash==aPage[i].dataset.hash){
                                aPage[i].style.display="block";
                                window.location.hash=currentHash;
                            }else{
                                aPage[i].style.display="none";
                            }
                        }
            }
            // 监听hash的变化,触发事件
            window.onhashchange=function(){
                // refresh()
                window.location.reload();
            }
        </script>
    </body>
    </html>
  • 相关阅读:
    my read travel
    OS + CentOS 7 / centos 7 / config / configuration / rescue / rc.local / yum
    my soft / win soft
    如何撰写发明专利申请文件
    专利局审查员如何审专利
    国际专利分类表(2016版)
    手把手教你写专利申请书/如何申请专利
    Packets switched through Linux bridge have very high packet delay variation and latency?
    当心僵尸:过时Linux内核的安全风险
    飞漫魏永明:从MiniGUI看嵌入式十年得与失
  • 原文地址:https://www.cnblogs.com/zhangzhicheng/p/6195418.html
Copyright © 2020-2023  润新知