HTML5 History API 實現無刷新跳轉

 在HTML5中javascript

  1. 新增了經過JS在瀏覽器歷史記錄中添加項目的功能。php

      2. 在不刷新頁面的前提下顯示改變瀏覽器地址欄中的URL。html

      3. 添加了當用戶單擊瀏覽器的後退按鈕時觸發的事件。html5

 經過以上三點,能夠實如今不刷新頁面的前提下動態改變瀏覽器地址欄中的URL,動態顯示頁面內容。java

 好比: 當頁面A和頁面B內容不同的時候,在HTML5以前,若是從頁面A切換到頁面B時,須要在瀏覽器下從頁面A切換到頁面B,或者說,若是須要有後退按鈕功 能的話,能夠在URL地址加#XXXX 能夠實現後退功能。那麼如今在HTML5中,能夠經過History API實現以下處理便可:jquery

  1. 在A頁面 經過發AJAX請求 請求頁面中的B數據。web

  2. 在頁面A中經過JS裝載相應的信息到相應的位置來。ajax

  3. 經過History API在不刷新頁面的狀況下在瀏覽器的地址欄中從頁面A的URL地址切換到頁面B的URL地址。  json

HTML4中的History API

屬性

  1. length 歷史的項數。javascript 所能管到的歷史被限制在用瀏覽器的「前進」「後退」鍵能夠去到的範圍。本屬性返回的是「前進」和「後退」兩個按鍵之下包含的地址數的和。

方法

  1. back() 後退,跟按下「後退」鍵是等效的。
  2. forward() 前進,跟按下「前進」鍵是等效的。
  3. go() 用法:history.go(x);在歷史的範圍內去到指定的一個地址。若是 x < 0,則後退 x 個地址,若是 x > 0,則前進 x 個地址,若是 x == 0,則刷新如今打開的網頁。history.go(0) 跟 location.reload() 是等效的。

HTML5中的History API

  1. history.pushState(data, title [, url]):往歷史記錄堆棧頂部添加一條記錄;data會在onpopstate事件觸發時做爲參數傳遞過去;title爲頁面標題,當前全部瀏覽器都會 忽略此參數;url爲頁面地址,可選,缺省爲當前頁地址。瀏覽器

  2. history.replaceState(data, title [, url]) :更改當前的歷史記錄,參數同上。

  3. history.state:用於存儲以上方法的data數據,不一樣瀏覽器的讀寫權限不同。

  4. popstate事件:當用戶單擊瀏覽器的後退或者前進按鈕時觸發該事件。在事件處理函數中讀取觸發事件的事件對象的state屬性值,該屬性值即爲執行pushState方法時所使用的第一個參數值,其中保存了在向瀏覽器歷史記錄中添加記錄同步保存的對象。

 到目前爲止,IE10,firefox4以上的版本,Chrome8以上的版本,Safari5,Opera11以上的版本瀏覽器支持HTML5中的History API。

HTML:

 1 <!DOCTYPE HTML>
 2 <html>
 3  <head>
 4   <title> New Document </title>
 5   <style>
 6     ul,li{list-style:none;}
 7     .container{width:600px;border:1px solid #ccc;overflow:hidden;}
 8     .container ul{float:left;width:102px;}
 9     .container li{width:100px;height:22px;line-height:22px;overflow:hidden;}
10     .container li a{text-decoration:none;}
11     .container li.current a{color:red;}
12     .all-content{width:400px;float:left;overflow:hidden;}
13   </style>
14   <script src="jquery-1.10.2.min.js"></script>
15   <script src="index.js"></script>
16  </head>
17 
18  <body>
19     <div class="container">
20         <ul class="list">
21             <li>
22                 <a href="http://localhost/html5/index.php">測試1</a>
23             </li>
24             <li>
25                 <a href="http://localhost/html5/index2.php">測試2</a>
26             </li>
27             <li>
28                 <a href="http://localhost/html5/index3.php">測試3</a>
29             </li>
30         </ul>
31 
32         <div class="all-content">
33             <ul class="content">
34                 <li>111</li>
35                 <li>222</li>
36                 <li>333</li>
37             </ul>
38         </div>
39     </div>
40  </body>
41 </html>
View Code

JS:

 1 /**
 2  * HTML5 history and ajax
 3  */
 4 
 5  $(function(){
 6     var ajax,
 7         currentState;
 8     $('.container li').unbind().bind('click',function(e){
 9         
10         e.preventDefault();
11         var target = e.target,
12             url = $(target).attr('href');
13         !$(this).hasClass('current') && $(this).addClass('current').siblings().removeClass("current");
14         if(ajax == undefined) {
15             currentState = {
16                 url: document.location.href,
17                 title: document.title,
18                 html: $('.content').html()
19             };
20         }
21         ajax = $.ajax({
22                 type:'POST',
23                 url: url,
24                 dataType:'json',
25                 success: function(data){
26                     var html = '';
27                     if(data.length > 0) {
28                         for(var i = 0, ilist = data.length; i < ilist; i++) {
29                             html += '<li>' +data[i].age+ '</li>' + 
30                                     '<li>' +data[i].name+ '</li>' +
31                                     '<li>' +data[i].sex+ '</li>';
32                         }
33                         $('.content').html(html);
34                     }
35                     var state = {
36                         url: url,
37                         title: document.title,
38                         html: $('.content').html()
39                     };
40                     history.pushState(state,null,url);
41                 }
42         });
43         
44     });
45 
46     window.addEventListener('popstate',function(event){
47         if(ajax == null){
48                 return;
49             }else if(event && event.state){
50                 document.title = event.state.title;
51                 $('.content').html(event.state.html);
52             }else{
53                 document.title = currentState.title;
54                 $('.content').html(currentState.html);
55             }
56     });
57  });
View Code

轉至:http://www.alixixi.com/web/a/2014032492869.shtml

相關文章
相關標籤/搜索