• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > HTML5实战与剖析之历史管理(history对象)

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

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含HTML5,实战与剖析,历史管理等相关知识,匿名希望在学习及工作中可以帮助到您
  HTML5新添加了对历史的管理,更新了history对象让管理历史状态更加方便了。在现代Web应用中,用户可以通过”前进”和”后退”按钮进行历史页面的切换。这让一些不在新页面中打开的新页面前进后退自如,提高了用户体验。

  通过haschange事件,可以知道URL的参数什么时候发生了变化,也就是什么时候该有所反应。通过状态管理的API,能够在不加载新页面的情况下改变浏览器的URL。所以需要使用history.pushState()方法。history.pushState()方法接收三个参数:1.要存的内容 2.标题(一般写个空的字符串) 3.地址(可选)。小例子如下


  JavaScript代码

history.pushState({name: "menglong"}, '', "li.html");

  执行了history.pushState()方法后,新的状态信息就会被加入到历史状态栈,而浏览器地址栏也会变成新的相对URL。但是,浏览器并不会想服务器发送请求,即使历史状态改变之后查新location.href也会返回与地址栏中相同的地址。另外,第二个参数目前还没有浏览器实现,所以完全可以只传入一个空字符串即可,或者一个短标题也可以。第一个参数则应该尽可能提供初始化页面状态所需的各种信息。

  因为history.pushState()方法会创建新的历史状态,所以会发现”后退”按钮也可以使用了。按下”后退”按钮,会触发window对象的popstate事件。Popstate事件的事件对象有一个state属性,这个属性就包含着当初以第一个参数传递给pushState()的状态对象。小例子如下


  JavaScript代码

window.addEventListener('popstate',function(ev){
	var state = event.state;
	if(state){ // 当第一个页面加载的时候state为空
		processState(state)
	}
}, false);

  得到了这个状态的对象后,必须把页面重置为状态对象中的数据表示的状态(因为浏览器不会自动为你做这些)。记住,浏览器加载的第一个页面没有状态,所以”后退”阿牛返回浏览器加载的第一个页面时,event.state值为null。

  要更新当前历史状态,可以调用replaceState(),传入的参数与pushState()方法的前两个参数相同。调用replaceState()不会在历史状态栈中创建新状态,只会重写当前状态。小例子如下

  JavaScript代码

history.replaveState({name: "meng"}, "meng1234");

  在使用HTML5的历史状态管理机制的时候,需要确保使用pushState()创造的每一个”假”URL,在Web服务器上都有一个真的、实际存在的URL与之对应。否则,单机”刷新”按钮会导致404错误。

  支持HTML5历史状态管理的浏览器有Chrome、Safari 5+、Firefox 4+和Opera 11.5+。在Safari和Chrome中,传递给pushState()或replaceState()的状态对象中不能包含DOM元素。而Firefox支持在状态对象中包含DOM元素。Opera还支持一个history.state属性,它返回当前状态的状态对象。下面就是小例子时间了,结合小例子才能更好的理解HTML5中的历史管理。


  添加href值实现历史管理

  HTML代码

<input type="button" value="35选7" id="input1" />
<p id="p1"></p>

  JavaScript代码

//onhashchange : 事件 : 当hash值改变的时候触发的事件

//hash改变就会出现就会出现历史管理

window.onload = function(){
	var oInput = document.getElementById('input1');
	var op = document.getElementById('p1');
	
	var obj = {};
	
	oInput.onclick = function(){
	
		var number = randomNum(35,7);
		
		op.innerHTML = number;
		
		var oRN = Math.random();
		
		obj[oRN] = number;
		
		window.location.hash = oRN;
	
	};
	
	
	window.onhashchange = function(){
	
		var number = obj[window.location.hash.substring(1)] || '';
		
		op.innerHTML = number;
	
	};
	
	
	function randomNum(alls,now){
	
		var arr = [];
		var newArr = [];
		
		for(var i=1;i<=alls;i++){
			arr.push(i);
		}
		
		
		for(var i=0;i<now;i++){
			newArr.push( arr.splice( Math.floor(Math.random()*arr.length) ,1 ) );
		}
		
		return newArr;
	
	}
	
};

  通过HTML5中history对象实现历史管理

  HTML代码

<input type="button" value="35选7" id="input1" />
<p id="p1"></p>

  JavaScript代码

//pushState : 三个参数:1.要存的内容 2.标题(一般写个空的字符串) 3.地址(可选)

//history.pushState({name: "menglong"}, '', "li.html");

window.onload = function(){
	var oInput = document.getElementById('input1');
	var op = document.getElementById('p1');
	
	var iNow = 0;
	
	oInput.onclick = function(){
	
		var number = randomNum(35,7);
		
		op.innerHTML = number;

		history.pushState(number,'',iNow++);
	
	};
	
	
	window.onpopstate = function(ev){  //历史管理改变,就会触发
		
		var number = ev.state || '';

		op.innerHTML = number;
		
	};
	
	
	function randomNum(alls,now){
	
		var arr = [];
		var newArr = [];
		
		for(var i=1;i<=alls;i++){
			arr.push(i);
		}
		
		
		for(var i=0;i<now;i++){
			newArr.push( arr.splice( Math.floor(Math.random()*arr.length) ,1 ) );
		}
		
		return newArr;
	
	}
	
};

以上就是HTML5实战与剖析之历史管理(history对象)的内容,更多相关内容请关注微课江湖()!

您可能想查找下面的文章:

  • HTML5知识点总结
  • HTML5的本地存储
  • HTML5本地存储之IndexedDB
  • Html5实现文件异步上传功能
  • Html5新标签datalist实现输入框与后台数据库数据的动态匹配
  • 详解HTML5 window.postMessage与跨域
  • HTML5拖放API实现拖放排序的实例代码
  • 解决html5中video标签无法播放mp4问题的办法
  • HTML5新特性 多线程(Worker SharedWorker)
  • Html5新增标签有哪些

相关文章

  • 2018-12-03HTML5实现移动端自适应的几种方法介绍
  • 2018-12-03基于HTML5 SVG可互动的3D标签云jQuery插件
  • 2017-08-06针对HTML5的Web Worker使用攻略
  • 2017-08-06HTML5为输入框添加语音输入功能的实现方法
  • 2018-12-03HTML5每日一练之progress标签的应用
  • 2018-12-03html5 如何做到application cache?离线储存技术的简要说明
  • 2018-12-03如何使用H5的dataset
  • 2018-12-03HTML5中判断用户是否正在浏览页面的方法_html5教程技巧
  • 2018-12-03YouTube 宣布终止使用 Flash 作为默认设置,这是不是说明 Flash 真的要完了?
  • 2018-12-0320个为前端开发者准备的文档和指南(2)

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • 一张图片能隐含千言万语之隐藏你的程序代码_html5教程技巧
    • HTML5中meta属性的使用代码示例详解
    • Dreamweaver中设置html网页段落行间距的方法指导
    • 在Web项目中错误代码整理
    • HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题_html5教程技巧
    • HTML5结合互联网+ 实现的3D隧道(附代码)
    • HTML5的革新——语义化标签
    • 把 HTML5 简称为 H5 的人,会把 CSS3 说成 C3 吗?
    • 三分钟HTML5画布(Canvas)动画教程 - CSDN博客
    • HTML5的下拉框应该如何增加用户体验

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有