至学了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. Hibernate注解方式配置-继承关系

    在JPA中,实体继承关系的映射策略共有三种:单表继承策略(table per class).Joined策略(table per subclass)和Table_PER_Class策略. 1.单表继承 ...

  2. Day 1 T1

    题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉 ...

  3. java中注解的使用与实例 (二)

    java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...

  4. java基础-注释

    注释是一种形式的元数据,提供了非程序自身的数据,注释对于被注释的代码没有直接的影响. 本文主要概括注释的使用,java平台(SE)预定义的注释,类型注释是如跟可插入类型系统连用达到更强的类型检查的,以 ...

  5. $(document).ready,$(window).load,window.onload区别和联系

    $(document).ready是在dom结构加载完毕就执行. $(window).load 等价于window.onload,必须等到页面内包括图片的所有元素加载完毕后才能执行. $(docume ...

  6. Linux内核笔记——进程管理之执行体

    内核版本:linux-2.6.11 在Linux中,有多种执行体(指令流.执行单位),它们是CPU调度和分配资源的基本单位,它们是内核态可见的,即内核态下,每一种执行体都有对应的唯一数据结构task_ ...

  7. 转:Webpack 指南(整理 草稿)

    基础 安装 首先要安装 Node.js, Node.js 自带了软件包管理器 npm.用 npm 全局安装 Webpack: $ npm install webpack -g 通常我们会将 Webpa ...

  8. Django 1.7 throws django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet

    在程序中要添加django.setup() 整个程序如下所示 import os import django def populate(): python_cat = add_cat('Python' ...

  9. winfrom自定义滚动条

    panel或图片什么的跟着鼠标走,这里panel自己可以加背景图或直接搞个图就行了.为了演示清楚,有个滚动条控件做对比,与自定义的同步. using System; using System.Coll ...

  10. css解决display:inline-block;产生的缝隙(间隙)

    今天在做H5的水平滑动卡片时用到了display:inline-block;却发现处在同一水平线上的元素之间居然产生了缝隙,这很显然不是我想要的效果,所以我就换成了左浮动,这样缝隙的问题是解决了,但是 ...