pjax 和 NProgress.js 的研究和使用


看到 推酷 的博客效果挺好的,然後就找到了 這盤文章 :  http://www.tuicool.com/articles/fMrEVv  (使用Pjax優化你的網站);

這個網站是使用了 pjax 和 NProgress.js 這2個前端插件的;

下面先說 pjax:

https://github.com/defunkt/jquery-pjax 爲pjax的github項目地址

在github的項目地址裏有關於pjax的詳細說明和使用方法,這裏不再贅述,本文主要是使用中的一些代碼記錄和使用心得,方便以後查閱快速上手使用。

看下下述小段代碼:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <div class="body">  
  2.     <?php $action_name = $Think.ACTION_NAME; ?>  
  3.   
  4.     <!-- 頭部喲 -->  
  5.     <?php if ($action_name == 'news'): ?>  
  6.         <include file="Brand:header_news" />  
  7.     <?php elseif ($action_name == 'forum'): ?>  
  8.         <include file="Brand:header_forum" />  
  9.     <?php endif; ?>  
  10.   
  11.     <!-- 資訊的二級分類 -->  
  12.     <div class="cb"></div>  
  13.     <div class="brand-news-nav pjax">  
  14.         <ul class="clearfix">  
  15.             <li <?php if($_GET['cat'] == '') echo 'class="selected"'; ?>><a class="first" href="{:U("Brand/$action_name")}">全部</a></li>  
  16.             <volist name="cat_list" id="vo" key="i">  
  17.                 <li <?php if($_GET['cat'] == $vo['id']) echo 'class="selected"'; ?>><a href="{:U("Brand/$action_name",array('cat'=>$vo['id']))}">{$vo.name}</a></li>  
  18.             </volist>  
  19.         </ul>  
  20.     </div>  
  21.   
  22.     <script type="text/javascript">  
  23.         $(function(){  
  24.             $(document).pjax('.pjax a', '#pjax-container',{  
  25.                 type:'post',  
  26.                 scrollTo:false,  
  27.             });  
  28.             $(document).on('pjax:click', function() {  
  29.                 enable_loading = false;  
  30.             })  
  31.             $(document).on('pjax:send', function(){  
  32.                 var str = "<p class='tc mt-10'>加載中...</p>";  
  33.                 $('#pjax-container').html(str);  
  34.             })  
  35.   
  36.             //最後一個右側加邊框  
  37.             $(".brand-news-nav ul li").last().children('a').addClass('last');  
  38.             $(".brand-news-nav ul li").click(function(){  
  39.                 $(this).addClass('selected').siblings().removeClass('selected');  
  40.             })  
  41.         })  
  42.     </script>  
  43.   
  44.     <!-- 文章列表頁 -->  
  45.     <div class="wrap clearfix">  
  46.         <div class="brand-news-list fl" id="pjax-container">  
  47.             <include file="Brand:article_pjax" />  
  48.         </div>  
  49.         <div class="brand-news-right fr pb-20">  
  50.             <a href="{$adv3[0]['url']}"><img class="scrollLoading" data-url="{$adv3[0]['images']|showImagePath}" src="__PUBLIC__/index/images/loading270x160.gif" width="260" height="150"></a>  
  51.             <p class="title mt-10">法律支持</p>  
  52.             <ul class="bgc-fff">  
  53.                 <volist name="law_list" id="vo">  
  54.                     <a href="{:U('law',array('id'=>$vo['id']))}"><li>{$vo.name}</li></a>  
  55.                 </volist>  
  56.             </ul>  
  57.             <button class="btn btn-right mt-10 btn-consult">免費諮詢</button>  
  58.             <script type="text/javascript">  
  59.                 $(function(){  
  60.                     //最後一個需要添加一個last的樣式  
  61.                     $(".brand-news-right li:last").addClass('last');  
  62.                 })  
  63.             </script>  
  64.         </div>  
  65.     </div>  
  66. </div>  


服務器端處理

[php] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. if(is_pjax()){  
  2.     $this->display('article_pjax');  
  3. }else{  
  4.     $this->display('article');  
  5. }  

[php] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. //判斷是否是pjax請求  
  2. function is_pjax(){  
  3.     return array_key_exists('HTTP_X_PJAX'$_SERVER) && $_SERVER['HTTP_X_PJAX'];  
  4. }  

其中的主要思想就是當     .pjax a    進行點擊的時候,將#pjax-container的內容替換爲請求後的內容。在後端處理時需要判斷是否是pjax請求,如果是需要進行局部渲染,如果不是進行全部渲染。

因爲pjax用到了HTML5技術,如果瀏覽器不支持Html5那麼網站會正常進行跳轉式的加載,如果支持那麼只是進行局部渲染(但是瀏覽器地址欄中的url會正常跟着a鏈接進行變動)。

注意上述的js代碼中在配置pjax時有個參數scrollTo:false,加上此參數表示點擊連接後網頁的scrollBar不會變動,如沒有此參數,每次點擊時瀏覽視窗會自動跳轉到網頁頂部

然後接下來是 NProgress :


NProgress.js 的下載地址 

https://github.com/rstacruz/nprogress


NProgress 需要Jquery 版本在 1.8以上;

引入Nprogress

<script src='nprogress.js'></script>
<link rel='stylesheet' href='nprogress.css'/>

當Pjax在使用的時候,可用如下代碼:


$(document).on('pjax:start', function() { NProgress.start(); });
$(document).on('pjax:end',   function() { NProgress.done();  });
其他具體用法 可參照  http://blog.csdn.net/u012369749/article/details/62422113 (NProgress.js全站進度條插件 中文API



發佈了50 篇原創文章 · 獲贊 53 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章