實現歷史管理的兩種方法:
1.onhashchange 事件;
2.通過pushState和popstate事件。
下面是通過福彩35選7來簡單實現。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="button" name="input1" id="input1" value="35選7" />
<div id="div1"></div>
<script type="text/javascript">
//onhashchange 事件:當hash值有變化時觸發;
var oInput=document.getElementById("input1"),
oDiv=document.getElementById("div1"),
obj={};
oInput.onclick=function(){
var number=randomNum(35,7);
oDiv.innerHTML=number;
var ORD=Math.random(); //隨機數
obj[ORD]=number; //將隨機數和數組對應起來
window.location.hash=ORD; //地址欄中hash爲"#"+隨機數
}
window.onhashchange=function(){
var num=obj[window.location.hash.substring(1)] || ''; //返回最開始頁面,oDiv.innerHTML='';
oDiv.innerHTML=num;
}
//從1-35中選出7個隨機數的函數
function randomNum(total,sample){
var arr=[];
var arr2=[];
for (var i=1; i<=total; i++) {
arr.push(i);
}
for (var i=0; i<sample; i++) {
arr2.push(arr.splice(Math.floor(Math.random()*arr.length),1));
}
return arr2;
}
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="button" name="input1" id="input1" value="35選7" />
<div id="div1"></div>
<script type="text/javascript">
//pushState:存數據,三個參數:數據,標題,地址
//popstate事件:取數據,event.state
var oInput=document.getElementById("input1"),
oDiv=document.getElementById("div1"),
iNow=0;
oInput.onclick=function(){
var number=randomNum(35,7);
oDiv.innerHTML=number;
history.pushState(number,'',iNow++);//第三個參數不寫時,地址欄不變化。而此處地址欄會變化,但此處地址是虛假的,需在服務器制定地址,否則刷新地址會找不到頁面
}
window.onpopstate=function(ev){
var num=ev.state || '';
oDiv.innerHTML=num;
}
//從1-35中選出7個隨機數的函數
function randomNum(total,sample){
var arr=[];
var arr2=[];
for (var i=1; i<=total; i++) {
arr.push(i);
}
for (var i=0; i<sample; i++) {
arr2.push(arr.splice(Math.floor(Math.random()*arr.length),1));
}
return arr2;
}
</script>
</body>
</html>