jquery監聽頁面滾動條滾動事件


一、jQuery檢測瀏覽器window滾動條到達底部
jQuery獲取位置和尺寸相關函數:
$(document).height()    獲取整個頁面的高度
$(window).height()    獲取當前也就是瀏覽器所能看到的頁面的那部分的高度。這個大小在你縮放瀏覽器窗口大小時會改變,與document是不一樣的
scrollTop()    獲取匹配元素相對滾動條頂部的偏移。
scrollLeft()    獲取匹配元素相對滾動條左側的偏移。
scroll([[data],fn])    當滾動條發生變化時觸犯scroll事件
jQuery檢測滾動條到達底部代碼:

 1 $(document).ready(function() {
 2   $(window).scroll(function() {
 3   
 4     if ($(document).scrollTop()<=0){
 5       alert("滾動條已經到達頂部為0");
 6     }
 7   
 8     if ($(document).scrollTop() >= $(document).height() - $(window).height()) {
 9       alert("滾動條已經到達底部為" + $(document).scrollTop());
10     }
11   });
12 });

二、jQuery檢測div中滾動條到達底部
上半篇介紹了jQuery檢測瀏覽器window滾動條到達底部,其實還並不理解scrollTop和scrollHeight概念,通常滾動條都是放在div中的。

1 <div id="div1" style="overflow-y:auto; overflow-x:hidden; height:500px;">
2   <div style="height:750px;">
3   </div>
4 </div>

由於內部的div標簽高度比外部的長,並且外部的div允許自動出現垂直滾動條,所以用瀏覽器打開后,可以看到垂直滾動條。

那么,這里的外部div 的scrollTop、scrollHeight 屬性到底是什么呢?
   實際上,在js代碼里,滾動條是被抽象為一個“點”來對待的。scrollHeight其實不是“滾動條的高度”(b),而是表示滾動條需要滾動的高度,即內部div的高度750px。而scrollTop表示滾動條(一個點)當前的位置在750px里占了多少。

判斷垂直滾動條是否到達底部

 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    <head>
 4      <meta http-equiv="content-type" content="text/html;charset=utf-8">
 5      <title>下拉滾動條滾到底部了嗎?</title>
 6      <script language="javascript" src="jquery-1.4.2.min.js" mce_src="jquery-1.4.2.min.js"></script>
 7      <script language="javascript">
 8      $(document).ready(function (){
 9        var nScrollHight = 0; //滾動距離總長(注意不是滾動條的長度)
10        var nScrollTop = 0;   //滾動到的當前位置
11        var nDivHight = $("#div1").height();
12        $("#div1").scroll(function(){
13          nScrollHight = $(this)[0].scrollHeight;
14          nScrollTop = $(this)[0].scrollTop;
15      var paddingBottom = parseInt( $(this).css('padding-bottom') ),paddingTop = parseInt( $(this).css('padding-top') );
16          if(nScrollTop + paddingBottom + paddingTop + nDivHight >= nScrollHight)
17            alert("滾動條到底部了");
18          });
19      });
20      </script>
21    <body>
22    <div id="div1" style="overflow-y:auto; overflow-x:hidden; height:500px;">
23      <div style="background-color:#ccc; height:750px;">IE 和 FF 下測試通過</div>
24    </div>
25    </body>
26    </html>

代碼解說:
   內部div高度為750,外部div高度為500,所以垂直滾動條需要滾動750-500=250的距離,就會到達底部,參見語句nScrollTop + nDivHight >= nScrollHight。
   程序中,在外部div的scroll(滾動)事件中偵測和執行if判斷語句,是非常消耗CPU資源的。用鼠標拖拉滾動條,只要有一個像素的變動就會觸發該事件。但點擊滾動條兩頭的箭頭,事件觸發的頻率會低得多。所以滾動條的scroll事件要謹慎使用。
   本示例判斷的是沒有水平滾動條的情況,在有水平滾動條時,情況會有細小的變化,所以nScrollTop + nDivHight >= nScrollHight語句中,需要用“>=”比較運算符,而沒有水平滾動條的時候,等號“=”就足夠了。大家可以實際測試一下。還可以判斷水平滾動條是否滾動到頭了。

 三、jQuery滾動條到達底部加載數據

 1 msg_list_loading = false;
 2     
 3     $('.msg_list').on('scroll', function(){
 4         if ( ! msg_list_loading ){
 5             load_more_msg();
 6         }
 7     })
 8     
 9     function load_more_msg(){
10         
11         var msg_list = $('.msg_list');
12 
13         if (nScrollTop + paddingBottom + paddingTop + nDivHight >= nScrollHight ) { 
14             msg_list_loading = true;
15             msg_list.append('<div class="loading"></div>');
16             $.get('ajax_data.html').done(function( data ){ 
17                 msg_list.find(".loading").remove();
18                 msg_list.append( data );
19                 msg_list_loading = false;
20             });
21             
22         } 
23     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM