H5-歷史管理

實現歷史管理的兩種方法:
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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章