html5 - history 历史管理

参考文章:

w3c     :  http://www.w3.org/html/ig/zh/wiki/HTML5/history

 张鑫旭  : http://www.zhangxinxu.com/wordpress/2013/06/html5-history-api-pushstate-replacestate-ajax/

zawa   :  http://zawa.iteye.com/blog/1271031 

Demo : Demo

截图:

代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>选项卡</title>
<style>
body {background: #444; }
p{margin:0;}
.tab_bor{width:500px;margin:20px auto;overflow:}
.tab_bor ul{padding:10px 10px 0 10px;margin:0; display:inline-block;}
.tab_bor li{border:1px solid #fff;border-bottom:none;background:#1b5775;color:#fff;font-weight:bold;padding:0 10px; line-height:32px; font-size:14px;float:left;margin:0 2px;list-style:none; cursor:pointer;border-bottom:none;}
.tab_bor .active{ border:1px solid #fff;color:#fff; position:relative;top:1px;border-bottom:none;background:#187cc2;}
.tab_bor p{padding:10px;color:#fff;font-size:12px;border:1px solid #fff; display:none;background:#383838;height:100px;}
.tab_bor .show{display:block;background:#187cc2;}
</style>
<script>
window.onload = function(){

	var oDiv = document.getElementById(‘div1‘),
		aLis = oDiv.getElementsByTagName(‘li‘),
		aPs  = oDiv.getElementsByTagName(‘p‘);

	for( var i=0,len = aLis.length;i<len;i++ ){

		aLis[i].index = i;
		aLis[i].onclick = function(){

			var index = this.index ;
			var name = this.dataset.name;
			var title = ‘选项卡‘+(index+1);
			document.title = title;
			history.pushState(index,title, ‘#‘+name);

			for( var i=0,len = aLis.length;i<len;i++ ){
				aLis[i].className = ‘‘;
				aPs[i].className = ‘‘;
			}

			this.className = ‘active‘;
			aPs[ index ].className = ‘show‘;

		}

	} 

	if( history.pushState ){

		window.onpopstate = function( ev ){

			var ev = window.event || ev;
			var state = ev.state || 0;

			for( var j=0,len = aLis.length;j<len;j++ ){
					aLis[j].className = ‘‘;
		 			aPs[j].className = ‘‘;
		 	}

	 		aLis[state].className = ‘active‘;
	 		aPs[state].className = ‘show‘;
		}

	}

	window.onhashchange = function(){

		setLocHistory();

	}

	setLocHistory();

	function setLocHistory(){

		var locName = location.href.split("#")[1] || ‘tab1‘;

		for( var i=0,len = aLis.length;i<len;i++ ){		

			if( locName == aLis[i].dataset.name ){

				for( var j=0,len = aLis.length;j<len;j++ ){
					aLis[j].className = ‘‘;
					aPs[j].className = ‘‘;
				}

				aLis[i].className = ‘active‘;
				aPs[i].className = ‘show‘;

			}

		}

	}

}
</script>

</head>
<body>
	<div class="tab_bor" id="div1">
		<ul>
	    	<li class="active" data-name="tab1">标签一</li>
	        <li data-name="tab2">标签二</li>
	        <li data-name="tab3">标签三</li>
	        <li data-name="tab4">标签四</li>
	    </ul>
	    <p class="show"  data-name="tab1">
	    	内容一
	    </p>
		<p  data-name="tab2">
	    	内容二
	    </p>
		<p  data-name="tab3">
	    	内容三
	    </p>
	    <p data-name="tab4">
	    	内容四
	    </p>
	</div>
</body>
</html>

 

后记:

这“history.pushState” 必须在服务端才能生肖,所以这页面在服务端打开。

大致讲讲api 前边的文章已经很详尽了:

history.pushState 三个参数  第一个参数为存储的数据,第二值是设置document.title的值(不过这个方法现在还没有完全实现),第三个值是url路径(这个需要和后台配合。。。。其实我也不是很懂。。。。);

window.onpopstate 相当于取值 ev.state 就是history.pushState存储的数据值;

window.onhashchange 只要location有变化就执行方法的事件;

他的应用当然有些说是做这个 翻页的记录什么的 其实也有可以做这些一站式开发的打开判断,我这demo就是模拟一站式开发的意思。

时间: 2024-08-29 23:35:20

html5 - history 历史管理的相关文章

html5的onhashchange和history历史管理

html5的onhashchange和history历史管理 现在的开发,越来越倾向于页面内跳转,这种情况下需要更新自己的知识,来实现页面内跳转.history就是解决这个问题的. HTML5有两种解决办法: 1,onhashchange 用到了window.loaction.hash对象(存,取) 2,history (1) pushstate 三个参数:数据,标题(为空),url(可选). (2) popstate是一个事件,读取event.state数据 注意:url是虚假的.用户不能实际

HTML5实战与剖析之历史管理(history对象)

HTML5新添加了对历史的管理,更新了history对象让管理历史状态更加方便了.在现代Web应用中,用户可以通过"前进"和"后退"按钮进行历史页面的切换.这让一些不在新页面中打开的新页面前进后退自如,提高了用户体验. 通过haschange事件,可以知道URL的参数什么时候发生了变化,也就是什么时候该有所反应.通过状态管理的API,能够在不加载新页面的情况下改变浏览器的URL.所以需要使用history.pushState()方法.history.pushStat

html5 历史管理

1.onhashchange:改变hash值来进行历史管理. 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <input type="button" value="随机选择" id="

HTML5自学笔记[ 8 ]历史管理

触发历史管理的三种方法: 跳转页面 改变hash值 pushState(在服务器环境下运行) 用hash值来触发历史管理: 1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <title>随机产生彩票号码</title> 5 <meta charset="utf-8"/> 6 <script> 7 window.onload = func

历史管理

历史管理 •onhashchange  :改变hash值来管理 window.location.hash=''; window.onhashchange=function(){} •history  : –服务器下运行 –pushState :  三个参数 :数据  标题(都没实现)  地址(可选) –popstate事件 :  读取数据   event.state –注意:网址是虚假的,需在服务器指定对应页面,不然刷新找不到页面

ajax与HTML5 history pushState/replaceState实例

一.本文就是个实例展示 三点: 我就TM想找个例子,知道如何个使用,使用语法什么的滚粗 跟搜索引擎搞基 自己备忘 精力总是有限的,昨天一冲动,在上海浦东外环之外订了个90米的房子,要借钱筹首付.贷款和领证什么的.HTML5 history相关知识点啪啦啪啦讲起来也是一条又臭又长的裹脚布,精气神实在不够用,这里,直接一个实例. 二.ajax载入与浏览器历史的前进与后退 众所周知,Ajax可以实现页面的无刷新操作——优点:但是,也会造成另外的问题,无法前进与后退!曾几何时,Gmail似乎借助ifra

HTML5 history pushState/replaceState实例

---恢复内容开始--- 在移动端,越来越倾向于页面内跳转,而页面内跳转就需要用到history的管理,html5的history是一种解决方案. 在没有history ap之前,我们经常使用散列值来改变页面内容,特别是那些对页面特别重要的内容.因为没有刷新,所以对于单页面应用,改变其URL是不可能的.此外,当你改变URL的散列值,它对浏览器的历史记录没有任何影响.通过增加location.hash,并用onhashchange来达到目的. 现在对于HTML 5的History API来说,这些

HTML5 history详解

最近研究vue-router单页转跳而不向服务器请求的原理, 主要是HTML5 history以及hash的应用,支持history时使用history模式 下面详细学习了一下常用的history相关的API 常用API: 1.history.length: 返回当前页面所产生的历史记录个数,即在同一个浏览器tab下产生的历史记录: 2.history.pushState(state,title,URL): 向浏览器新增一条历史记录,但是不会刷新当前页面(不会重载),其中state为对象,可以用

HTML5 离线缓存管理库

一.HTML5离线缓存技术 支持离线缓存是HTML5中的一个重点,离线缓存就是让用户即使在断网的情况下依然可以正常的运行应用.传统的本地存储数据的方式有 localstorage,sessionstorage和cookie.但是这些传统的方式有着致命的弊端.首先这些传统的存储方式的最大使用空间有 限,最多不超过5M;其次它们处理大规模的结构化数据的能力有限.鉴于传统方式的局限性,HTML5提出了三种新的离线缓存解决方案:Web SQL,indexedDB和File System. 其中Web S