Q:假设有一个需求,要求前进后退到用户前一次操作状态的页面,如何实现呢?接下来看例子
<body>
<button id="btn">35选7</button>
<div id="wrap"></div>
<script>
var oWrap=document.getElementById("wrap");
var oBtn=document.getElementById("btn");
oBtn.onclick=function(){
oWrap.innerHTML=getRandomData(35,7).join();
window.location.hash=getRandomData(35,7).join();//设置hash值 IE8以下不兼容
}
window.onhashchange=function(){//hash值变化时 触发
var num=window.location.hash.substring(1);
oWrap.innerHTML=num;
}
function getRandomData(all,num){
var allData=[];
var getData=[];
for(var i=1;i<=all;i++){
allData.push(i);
}
for(var i=0;i<num;i++){
getData.push(allData.splice(Math.floor(Math.random()*allData.length),1))
}
return getData;
console.log(getData)
}
</script>
</body>
接下来 利用H5的history实现同样的问题(IE10以上才支持)
<body>
<button id="btn">35选7</button>
<div id="wrap"></div>
<script>
var oWrap=document.getElementById("wrap");
var oBtn=document.getElementById("btn");
oBtn.onclick=function(){
oWrap.innerHTML=getRandomData(35,7).join();
history.pushState(getRandomData(35,7).join(),null);
}
window.onpopstate=function(ev){
var num=ev.state;
oWrap.innerHTML=num;
}
function getRandomData(all,num){
var allData=[];
var getData=[];
for(var i=1;i<=all;i++){
allData.push(i);
}
for(var i=0;i<num;i++){
getData.push(allData.splice(Math.floor(Math.random()*allData.length),1))
}
return getData;
console.log(getData)
}
</script>
</body>