html5历史管理

寻技术 Html/CSS 2023年07月12日 57

  在网易云课堂上看了妙味课堂的关于html5历史管理的课程,在这里做一下笔记。

  单页面或ajax局部刷新的页面中,没有办法通过前一步和后一步得到历史访问数据,此时有两种方法可以解决这个问题:

  1.onhashchange事件,示例代码:

<body>
	<input type="button" value="35选7" >
	<div ></div>

	<script type="text/javascript">
		var oInput=document.getElementById("input1");
		var oDiv=document.getElementById("div1");
		var obj={};

		oInput.onclick=function(){
			var number=randomNumber(35,7);
			oDiv.innerHTML=number;
			var oRd=Math.random();
			obj[oRd]=number;
			window.location.hash=oRd;
		}

		window.onhashchange=function(){
			var number=obj[window.location.hash.substr(1)]||'';
			oDiv.innerHTML=number;
		}

		function randomNumber(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;
		}

	</script>
</body>
</html>

  

  2.history下的pushstate和popstate事件,示例代码:  

<body>
	<input type="button" value="35选7" >
	<div ></div>

	<script type="text/javascript">
		var oInput=document.getElementById("input1");
		var oDiv=document.getElementById("div1");

		oInput.onclick=function(){
			var number=randomNumber(35,7);
			oDiv.innerHTML=number;
			history.pushState(number,'');
		}

		window.onpopstate=function(ev){
			console.log(1);
			var number=ev.state||'';
			oDiv.innerHTML=number;
		}

		function randomNumber(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;
		}

	</script>
</body>
</html>

  几点说明:

  1.hash就是url中#和它后面的内容

  2.必须把hashchange事件处理程序添加给window对象,然后url参数列表只要变化就会调用它。

  3.pushstate方法接收三个参数:数据,标题(都没实现,实际开发中一般为‘’),地址(可选)

  4.popstate事件读取数据用event.state

关闭

用微信“扫一扫”