zoukankan      html  css  js  c++  java
  • 单页面实现之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>
  • 相关阅读:
    LuaStudio源码分析1初次编译
    swf相关开源的工具
    SWF SlideShow Scout
    Linux添加字体 晓>冥
    Navicat连接服务器数据库 晓>冥
    Linux部署kkFileView 晓>冥
    JAVA面试——网络 晓>冥
    本地sql文件导入服务器的mysql 晓>冥
    JAVA面试——异常 晓>冥
    Centos 7配置JDK1.8+MySQL5.7+Tomcat 8 开发环境 晓>冥
  • 原文地址:https://www.cnblogs.com/zhangzhicheng/p/6195418.html
Copyright © 2011-2022 走看看