1. 程式人生 > >下拉載入更多DEMO(js實現)

下拉載入更多DEMO(js實現)

專案的一個前端頁面展示已購買商品時,要求能下拉載入更多。花了點時間研究這個功能,以前沒做過。

    首先需要給div加scroll事件,監聽滾動條滾動動作。那何時觸發載入動作呢?當滾動條滾到底的時候。如何判斷滾動條滾到底呢?

    當滾動條的高度加上滾動條到div頂部的高度等於div的可滾動高度時,說明滾動條到底部了。公式如下。

[javascript] view plain copy 在CODE上檢視程式碼片派生到我的程式碼片
  1. this.scrollHeight <= $(this).scrollTop() + $(this).height()  

    給出一個能跑的demo,需要引入jquery。
[javascript] view plain copy 在CODE上檢視程式碼片派生到我的程式碼片
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <script src="jquery.js" type="text/javascript"></script>  
  5. </head>  
  6. <body>  
  7.     <div>下拉載入更多</div>  
  8.     <div class="main" style="height:700px;overflow:auto;">  
  9.         <div class
    ="child" style='border:1px solid red;margin-top:20px;color:grey;height:800px' ></div>  
  10.     </div>  
  11. </body>  
  12. <script  type="text/javascript">  
  13. $(document).ready(function(){  
  14.     $(".main").unbind("scroll").bind("scroll"function(e){  
  15.         var sum = this.scrollHeight;  
  16.         if
     (sum <= $(this).scrollTop() + $(this).height()) {  
  17.             $(".main").append($(".child").clone());  
  18.         }  
  19.     });  
  20. });  
  21. </script>  
  22. </html>  

    如果等滾動條拉到底部時再載入,會影響使用者體驗。因為一般動態載入的時候都需要向服務端請求資源,這時需要時間。一個更佳的方式是,當滾動條距離底部一定距離(C)時,就動態載入更多,向服務端請求資源。也就是預載入,預讀取。公式如下。 [javascript] view plain copy 在CODE上檢視程式碼片派生到我的程式碼片
  1. this.scrollHeight - C <= $(this).scrollTop() + $(this).height()  

    一個js功能,最後發現其實是個數學問題。最開始看同事寫的類似功能的程式碼式,十分繁瑣。當自己總結完這個公式後,思路立刻清晰了。透過現象看本質。