數據延遲加載


看來 lazyload.js 不能真正的實現數據動態加載了,只是一個樣子,其實咱們實現動態加載不過是爲了減輕服務器的壓力而已,lazyload.js 顯示是個花架子,如何實現真正的動態加載,須要對lazyload.js作改裝。 javascript

 

我認爲,動態加載本質上都是同樣的,即: 圖片或者數據一開始不會被加載,當你觸發了滾動條(說明你想繼續看這個網站)那麼圖片或者數據開始加載。 那麼實現的方法其實有不少,可是基本上都是經過替換的方式來實現的。 php

 


1. 土豆: css

 

Html代碼   收藏代碼
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  2. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>   
  3.       
  4. 能看的見到圖片:  
  5. <img src="http://at-img4.tdimg.com/board/2010/5/tylc-115X55.jpg"/>  
  6.   
  7.   <div id="lazyBox" style="margin-top:100px;">  
  8.        一開始看不到的圖片:  
  9.        <img width="120" height="90" style="border:1px solid blue;" class="lazyImg" alt="http://i01.img.tudou.com/data/imgs/i/051/720/095/p.jpg" src="http://css.tudouui.com/skin/__g/img/sprite.gif" coords="_DAA"/>  
  10.        <img width="120" height="90" style="border:1px solid blue;" class="lazyImg" alt="http://i01.img.tudou.com/data/imgs/i/051/871/396/m20.jpg" src="http://css.tudouui.com/skin/__g/img/sprite.gif" coords="_DBA"/>  
  11.   </div>  
  12.   <div style="height:1000px;">  
  13.   </div>      
  14.   
  15. <script type="text/javascript">   
  16.       var hasShow = false;  
  17.       $(window).bind("scroll",function(){  
  18.           if(hasShow==true){  
  19.               $(window).unbind("scroll");  
  20.               return;  
  21.           }  
  22.           var t = $(document).scrollTop();  
  23.           if(t>100){  
  24.               // 滾動高度超過100時,加載圖片  
  25.               hasShow = true;  
  26.               $("#lazyBox .lazyImg").each(function(){  
  27.                   $(this).attr("src",$(this).attr("alt"));  
  28.               });  
  29.           }  
  30.       });  
  31. </script>  
 

 

2. 微博 ajax提取數據 html

 

Html代碼   收藏代碼
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <html>  
  4. <head>  
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  6. <title>圖片動態加載示例</title>  
  7. <style type="text/css">  
  8. img{border:0;}  
  9. a{cursor:pointer;color:#014ccc;text-decoration:underline;}  
  10. a:hover{text-decoration:none;}  
  11. .clear{clear:both;height:0px;overflow:hidden;}  
  12. .img_list{margin:0 auto;}  
  13. .img_list li{list-style:none}  
  14. .img_list .items{width:300px;margin:0 auto;}  
  15. .img_list .item{float:left;margin-bottom:5px;font-size:14px;}  
  16. .img_list .item .order{display:inline-block;*display:inline;*zoom:1;width:28px;color:#f30;}  
  17. .img_list .item .i_thumb{width:300px;height:280px;}  
  18. .img_list .item .i_title{width:100%;height:20px;}  
  19. .showmore{height:35px;background:#f8f8f8;border-bottom:1px solid #cccccc;cursor:pointer;tetx-align:center;margin-bottom:25px;}  
  20. .showmore .handle{display:block;height:35px;text-align:center;color:#909090;font-size:14px;text-decoration:none;line-height:35px;}  
  21. .showmore .handle:hover{text-decoration:none;background:#e6e6e6;}  
  22. </style>  
  23. <script type="text/javascript" src="images_test/jquery-1.4.4.min.js"></script>  
  24. </head>  
  25.   
  26. <body>  
  27. <center><h1>圖片動態加載示例</h1></center>  
  28. <div class="img_list" id="img_list">  
  29.   <div class="items" id="items">  
  30.     <ul class="item">  
  31.       <li class="i_thumb"><a href="http://www.xuekaifa.com" target="_blank" ><img src="images_test/1.jpg"  /></a></li>  
  32.       <li class="i_title"><span class="order">1</span><a href="http://www.xuekaifa.com" target="_blank" >圖片</a></li>  
  33.     </ul>  
  34.   
  35.     <ul class="item">  
  36.       <li class="i_thumb"><a href="http://www.xuekaifa.com" target="_blank" ><img src="images_test/2.jpg"  /></a></li>  
  37.       <li class="i_title"><span class="order">2</span><a href="http://www.xuekaifa.com" target="_blank" >圖片</a></li>  
  38.     </ul>  
  39.                       
  40.     <ul class="item">  
  41.       <li class="i_thumb"><a href="http://www.xuekaifa.com" target="_blank" ><img src="images_test/3.jpg"  /></a></li>  
  42.       <li class="i_title"><span class="order">3</span><a href="http://www.xuekaifa.com" target="_blank" >圖片</a></li>  
  43.     </ul>  
  44.                       
  45.     <ul class="item">  
  46.       <li class="i_thumb"><a href="http://www.xuekaifa.com" target="_blank" ><img src="images_test/4.jpg"  /></a></li>  
  47.       <li class="i_title"><span class="order">4</span><a href="http://www.xuekaifa.com" target="_blank" >圖片</a></li>  
  48.     </ul>  
  49.                       
  50.     <div class="clear"></div>  
  51.   </div>  
  52.                       
  53.   <div class="showmore" id="showmore" ><a class="handle" href="javascript:show()">顯示更多結果</a></div>  
  54.       
  55. </div>  
  56.   
  57. <script type="text/javascript">  
  58. var iHeight = 0;  
  59. var iTop = 0;  
  60. var clientHeight = 0;  
  61. var iIntervalId = null;  
  62. var itemsSize = 0;  
  63. var pageNo = 1;   // 當前頁數,默認設爲第 1 頁  
  64. var pageSize = 4; // 每頁顯示的數量  
  65.   
  66. getPageHeight();  
  67.   
  68. // 添加定時檢測事件,每2秒檢測一次  
  69. iIntervalId = setInterval("_onScroll();", 2000);  
  70.   
  71. // 取得當前頁面顯示所佔用的高度  
  72. function getPageHeight() {  
  73.   if(document.body.clientHeight && document.documentElement.clientHeight) {    
  74.     clientHeight = (document.body.clientHeight < document.documentElement.clientHeight) ? document.body.clientHeight : document.documentElement.clientHeight;            
  75.   } else {    
  76.     clientHeight = (document.body.clientHeight > document.documentElement.clientHeight) ? document.body.clientHeight : document.documentElement.clientHeight;        
  77.   }  
  78.   
  79.   iHeight = Math.max(document.body.scrollHeight,document.documentElement.scrollHeight);  
  80. }  
  81.   
  82. // 調用ajax取服務端數據  
  83. function show() {  
  84.   pageNo++;  
  85.   
  86.   $.ajax({  
  87.     url: 'img.php?p='+pageNo+'&r='+Math.random(),  
  88.     type: 'GET',  
  89.     dataType: 'text',  
  90.     timeout: 4000,  
  91.     beforeSend: showLoadingImg,  
  92.     error: showFailure,  
  93.     success: showResponse  
  94.   });  
  95. }  
  96.   
  97. function showLoadingImg() {  
  98.   $('#showmore').html('<a class="handle" href="javascript:show()"><img src="images_test/loading.gif" height="32px" />顯示更多結果</a>');  
  99. }  
  100.   
  101. function showFailure() {  
  102.   $('#showmore').html('<font color=red> 獲取查詢數據出錯 </font>');  
  103. }  
  104.   
  105. // 根據ajax取出來的json數據轉換成html  
  106. function showResponse(responseData) {  
  107.   var returnjson = eval("("+responseData+")");  
  108.   itemsSize = returnjson.items.length;  
  109.   
  110.   var nextpagehtml = '';  
  111.   var pageOffset = (pageNo-1)*pageSize + 1;  
  112.   for(i=0; i<itemsSize; i++) {  
  113.     nextpagehtml += '<ul class="item">';  
  114.     nextpagehtml += '<li class="i_thumb"><a href="http://www.xuekaifa.com" target="_blank" title="'+ returnjson.items[i].name +'"><img src="'+ returnjson.items[i].pic +'" alt="'+ returnjson.items[i].name +'" /></a></li>';  
  115.     nextpagehtml += '<li class="i_title"><span class="order">'+ (pageOffset + i) +'</span><a href="http://www.xuekaifa.com" target="_blank" title="'+ returnjson.items[i].name +'">'+ returnjson.items[i].name +'</a></li>';              
  116.                           
  117.     nextpagehtml += '</ul>';  
  118.   }  
  119.   nextpagehtml += '<div class="clear"></div>';  
  120.   $('#items').html($('#items').html() + nextpagehtml);  
  121.   
  122.   // 當前頁碼數小於3頁時繼續顯示更多提示框  
  123.   if(pageNo < 3) {  
  124.     $('#showmore').html('<a class="handle" href="javascript:show()">顯示更多結果</a>');  
  125.   } else {  
  126.     clearInterval(iIntervalId);  
  127.     $('#showmore').hide();  
  128.   }  
  129. }  
  130.   
  131. // 判斷滾動條是否到達底部  
  132. function reachBottom() {  
  133.   var scrollTop = 0;  
  134.   if(document.documentElement && document.documentElement.scrollTop) {    
  135.     scrollTop = document.documentElement.scrollTop;    
  136.   } else if (document.body) {    
  137.     scrollTop = document.body.scrollTop;    
  138.   }  
  139.   if((scrollTop > 0) && (scrollTop + clientHeight == iHeight)) {  
  140.     return true;    
  141.   } else {    
  142.     return false;   
  143.   }  
  144. }  
  145.   
  146. // 檢測事件,檢測滾動條是否接近或到達頁面的底部區域,0.99是爲了更接近底部時  
  147. function _onScroll() {  
  148.   iTop = document.documentElement.scrollTop + document.body.scrollTop;  
  149.   getPageHeight();  
  150.   if(((iTop+clientHeight)>parseInt(iHeight*0.99))||reachBottom()) {  
  151.     if(pageNo >= 3) {  
  152.       clearInterval(iIntervalId);  
  153.       $('#showmore').hide();  
  154.       return;  
  155.     }  
  156.     show();  
  157.   }  
  158. };  
  159. </script>  
  160.   
  161. </body>  
  162. </html>  
 

img.php java

 

Php代碼   收藏代碼
  1. <?php  
  2. if($_GET['p'] == 2)  
  3. {  
  4.     echo '{"items":[{"name":"新加載 圖片 1","pic":"images_test/5.jpg"},{"name":"新加載 圖片 2","pic":"images_test/6.jpg"}, {"name":"新加載 圖片 3","pic":"images_test/7.jpg"}, {"name":"新加載 圖片 4","pic":"images_test/8.jpg"}]}';  
  5. }  
  6. elseif($_GET['p'] == 3)  
  7. {  
  8.     echo '{"items":[{"name":"新加載 圖片 5","pic":"images_test/9.jpg"},{"name":"新加載 圖片 6","pic":"images_test/10.jpg"}, {"name":"新加載 圖片 7","pic":"images_test/11.jpg"}, {"name":"新加載 圖片 8","pic":"images_test/12.jpg"}]}';  
  9. }  
  10. ?>  
 

3. 淘寶產品介紹 支持垂直、水平或同時兩個方向的延遲。 jquery

 

 

兼容:ie6/7/8, firefox 3.5.5, opera 10.10, safari 4.0.4, chrome 3.0 ajax

演示:http://www.cnblogs.com/cloudgamer/archive/2010/03/03/ImagesLazyLoad.html chrome

下載:http://dl.iteye.com/topics/download/a9fe3611-6ce9-3013-a425-32c107d04451 json

 

 

4. 滾動顯屏加載 api

 

demo 您能夠狠狠地點擊這裏:jQuery滾動加載圖片等demo

 

轉:http://www.zhangxinxu.com/wordpress/?p=1259

 

Html代碼   收藏代碼
  1. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>  
  2. <script type="text/javascript" src="http://www.zhangxinxu.com/study/js/mini/jquery.scrollLoading-min.js"></script>  
  3. <script> $(function() { $(".scrollLoading").scrollLoading();}); </script>   
 

表示全部class爲scrollLoading的元素綁定了滾動加載的方法。


固然,不可能真的就如此簡單,咱們還須要作點小動做的。元素默認是不加載的,那麼真正的加載地址顯然要預先在元素上放置的,例如新浪微博默認把頭像地址綁在了一個自定義的」dynamic-src」屬性上,見下圖:


新浪微博綁定真實圖片地址自定義屬性 張鑫旭-鑫空間-鑫生活

在HTML5中,以data-開頭的自定義屬性都是合法的,且地址能夠是圖片,頁面等。因此,我設定了綁定地址的自定義屬性爲」data-url」,此屬性值設爲真實的圖片(或頁面)地址就能夠了。例以下面:

 

<div class="scrollLoading" data-url="loaded.html">加載中...</div>

 

會在滾動時加載名爲loaded.html的頁面,並自動替換裏面的內容。

對於經常使用的圖片,還有一點小問題,就是其默認的src圖片地址。其src地址不能是真實的圖片地址(不然會直接一次性所有加載),也不能是空地址或是壞地址,不然IE瀏覽器下會出現很驚悚的紅叉叉。IE瀏覽器下的紅叉叉 張鑫旭-鑫空間-鑫生活 。個人作法是默認連接的是一個1px * 1px的gif透明圖片(大小很小),同時能夠透出後面加載中gif動畫圖片,當滾動加載的時候直接把此gif圖片替換掉。因而,對於圖片,可能就有相似下面的代碼:

 

<img class="scrollLoading" data-url="http://image.zhangxinxu.com/image/study/head/s180/1.jpeg" src="http://www.zhangxinxu.com/study/image/pixel.gif" width="180" height="180" style="background:url(http://www.zhangxinxu.com/study/image/loading.gif) no-repeat center;" />

 

scrollLoading是個很簡單很小的插件(無註釋YUI compressor min版僅508B),因此參數也不多,就一個,見下表:

 

 

參數 默認 釋義
attr data-url 獲取元素加載地址的屬性名

就這些了。此插件只適用於頁面默認滾動條的動態加載。對於內部div之類的滾動加載不支持。

 

 

 

5. KISSY 庫

 

主頁: http://docs.kissyui.com/

 

淘寶

 

附件

 

 

 

相關文章
相關標籤/搜索