至学了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>

单页面实现之hash的更多相关文章

  1. 单页面SPA应用路由原理 history hash

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  2. hash值是啥,单页面应用的实质

    1.什么hash Location hash属性,http://www.runoob.com/jsref/prop-loc-hash.html,hash 属性是一个可读可写的字符串,该字符串是 URL ...

  3. 利用hash或history实现单页面路由

    目录 html代码 css代码 JavaScript代码 hash方式 history 方式 浏览器端代码 服务器端 在chrome(版本 70.0.3538.110)测试正常 编写涉及:css, h ...

  4. 快速构建H5单页面切换骨架

    在Web App和Hybrid App横行的时代,为了拥有更好的用户体验,单页面应用顺势而生,单页面应用简称`SPA`,即Single Page Application,就是只有一个HTML页面的应用 ...

  5. 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore

    本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...

  6. 关于js单页面实现跳转原理以及利用angularjs框架路由实现单页面跳转

    还记得我们刚开始学习html时使用的锚节点实现跳转吗? <a href="#target">我想跳转至目标位置</a> <p>第一条</p ...

  7. 实现类似 QQ音乐网页版 的单页面总结

    最近需要对创业团队的网站进行改版,而我负责前端设计和实现. 下面是一些总结与体会: 当设计完成之前,我就跟和我配合的Java 后台说用iframe实现,结果说麻烦不肯,到最后突然对我说还是用ifram ...

  8. MVC route 和 Angular router 单页面的一些方式

    直接看代码和注释吧 ASP.NET MVC router public class RouteConfig { public static void RegisterRoutes(RouteColle ...

  9. H5单页面架构:backbone + requirejs + zepto + underscore

    首先,来看看整个项目结构. 跟上一篇angular类似,libs里多了underscore和zepto.三个根目录文件: index.html:唯一的html main.js:requirejs的配置 ...

随机推荐

  1. iOS Hit-Test应用

    最近又看了遍苹果的官方文档<Event Handling Guide for iOS>,对事件响应链中的hit-test view 又多了些理解,个人觉的官方文档对这块讲的非常简单,很多东 ...

  2. 将Unreal4打包后的工程嵌入到Qt或者桌面中

    #include "widget.h" #include "ui_widget.h" #include "windows.h" #inclu ...

  3. Dictionary Learning(字典学习、稀疏表示以及其他)

    第一部分 字典学习以及稀疏表示的概要 字典学习(Dictionary Learning)和稀疏表示(Sparse Representation)在学术界的正式称谓应该是稀疏字典学习(Sparse Di ...

  4. Flask下如何处理Requests 上传中文文件名的问题

    一.问题的由来     最近有个项目,叫做文档服务资源中心,类似于七牛,为各个业务系统提供统一的文件资源服务,包括文件的存储.操作管理.下载.预览等.在做文件存储的时候,遇到了这个当指定上传的文件名为 ...

  5. PO,VO,BO,DTO,POJO(POCO),DAO的区别(转载)

    PO:persistant object持久对象 最形象的理解就是一个PO就是数据库中的一条记录.好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象. BO:business object业 ...

  6. C# DataTable的Select()方法不支持 != 判断

    异常描述: 用户代码未处理 System.Data.SyntaxErrorException HResult=-2146232032 Message=无法解释位置 23 的标记“!”. Source= ...

  7. Ajax完整篇(转载)

    Ajax 完整教程 第 1 页 Ajax 简介Ajax 由 HTML.JavaScript™ 技术.DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用 ...

  8. 获取文件Md5值

    private static string GetFileMD5(string filePath) { string _md5Value = string.Empty; try { if (Syste ...

  9. ubuntu16.04 install flash

    今天安装了一下flash,发现不同版本的Ubuntu复制的位置不同,此处介绍Ubuntu16.04的安装方式 1.首先下载flash,下载tar.gz的 2.解压缩到当前目录 3,打开terminal ...

  10. dubbo 常见错误

    1. Caused by: java.lang.reflect.MalformedParameterizedTypeException 或 Caused by: java.lang.NoSuchMet ...