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="btn" />
 9         <div id="div1"></div>
10     </body>
11 </html>
12 <script>
13     window.onload = function(){
14         var oBtn = document.getElementById("btn");
15         var oDiv = document.getElementById("div1");
16         window.json = {};
17         oBtn.onclick = function(){
18             var key = Math.random();
19             var value = randomNum(35,7);
20             json[key] = value;
21             //oDiv.innerHTML = value;
22             window.location.hash = key;
23         }
24         
25         window.onhashchange = function(){
26             var hashValue = window.location.hash.substring(1);
27             if(!hashValue)return;
28             oDiv.innerHTML = json[hashValue];
29         }
30     }
31     
32     function randomNum(totlaNum,resultNum){
33         var totalArray = new Array();
34         var resultArray = new Array();
35         for(var i = 0 ;i < totlaNum;i++){
36             totalArray.push(i);
37         }
38         
39         for(var i = 1; i<= resultNum;i++){
40             resultArray.push(totalArray.splice(Math.floor(Math.random()*totalArray.length),1));
41         }
42         return resultArray;
43     }
44 </script>

 2、history+pushState+ popstate事件:需要在服务器下运行。网址是虚假的,需要服务器指定对应页面,否则刷新找不到页面。

 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="btn" />
 9         <div id="div1"></div>
10     </body>
11 </html>
12 <script type="text/javascript">
13     window.onload = function(){
14         var oBtn = document.getElementById("btn");
15         var oDiv = document.getElementById("div1");
16         window.json = {};
17         oBtn.onclick = function(){
18             var value = randomNum(35,7);
19             //pushState接收三个参数 :数据  标题(都没实现)  地址(可选)
20             window.history.pushState(value,"");
21             oDiv.innerHTML = value;
22         }
23         
24         window.onpopstate = function(ev){
25             oDiv.innerHTML = ev.state;
26         }
27         
28     }
29     
30     function randomNum(totlaNum,resultNum){
31         var totalArray = new Array();
32         var resultArray = new Array();
33         for(var i = 0 ;i < totlaNum;i++){
34             totalArray.push(i);
35         }
36         
37         for(var i = 1; i<= resultNum;i++){
38             resultArray.push(totalArray.splice(Math.floor(Math.random()*totalArray.length),1));
39         }
40         return resultArray;
41     }
42 </script>
原文地址:https://www.cnblogs.com/tengri/p/5559578.html