在网易云课堂上看了妙味课堂的关于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
版权声明:除特别声明外,本站所有文章皆是本站原创,转载请以超链接形式注明出处!