1、jQuery檢測瀏覽器window滾動條到達底部
jQuery獲取位置和尺寸相關函數:
$(document).height() 獲取整個頁面的高度
$(window).height() 獲取當前也就是瀏覽器所能看到的頁面的那部分的高度。這個大小在你縮放瀏覽器窗口大小時會改變,與document是不同的
scrollTop() 獲取匹配元素相對滾動條頂部的偏移。
scrollLeft() 獲取匹配元素相對滾動條左側的偏移。
scroll([[data],fn]) 當滾動條發生變化時觸犯scroll事件
jQuery檢測滾動條到達底部代碼:javascript
$(document).ready(function() { $(window).scroll(function() { if ($(document).scrollTop()<=0){ alert("滾動條已經到達頂部爲0"); } if ($(document).scrollTop() >= $(document).height() - $(window).height()) { alert("滾動條已經到達底部爲" + $(document).scrollTop()); } }); });
2、jQuery檢測div中滾動條到達底部
上半篇介紹了jQuery檢測瀏覽器window滾動條到達底部,其實還並不理解scrollTop和scrollHeight概念,一般滾動條都是放在div中的。css
<div id="div1" style="overflow-y:auto; overflow-x:hidden; height:500px;"> <div style="height:750px;"> </div> </div>
因爲內部的div標籤高度比外部的長,而且外部的div容許自動出現垂直滾動條,因此用瀏覽器打開後,能夠看到垂直滾動條。html
那麼,這裏的外部div 的scrollTop、scrollHeight 屬性究竟是什麼呢?
實際上,在js代碼裏,滾動條是被抽象爲一個「點」來對待的。scrollHeight其實不是「滾動條的高度」(b),而是表示滾動條須要滾動的高度,即內部div的高度750px。而scrollTop表示滾動條(一個點)當前的位置在750px裏佔了多少。java
判斷垂直滾動條是否到達底部jquery
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>下拉滾動條滾到底部了嗎?</title> <script language="javascript" src="jquery-1.4.2.min.js" mce_src="jquery-1.4.2.min.js"></script> <script language="javascript"> $(document).ready(function (){ var nScrollHight = 0; //滾動距離總長(注意不是滾動條的長度) var nScrollTop = 0; //滾動到的當前位置 var nDivHight = $("#div1").height(); $("#div1").scroll(function(){ nScrollHight = $(this)[0].scrollHeight; nScrollTop = $(this)[0].scrollTop; var paddingBottom = parseInt( $(this).css('padding-bottom') ),paddingTop = parseInt( $(this).css('padding-top') ); if(nScrollTop + paddingBottom + paddingTop + nDivHight >= nScrollHight) alert("滾動條到底部了"); }); }); </script> <body> <div id="div1" style="overflow-y:auto; overflow-x:hidden; height:500px;"> <div style="background-color:#ccc; height:750px;">IE 和 FF 下測試經過</div> </div> </body> </html>
代碼解說:
內部div高度爲750,外部div高度爲500,因此垂直滾動條須要滾動750-500=250的距離,就會到達底部,參見語句nScrollTop + nDivHight >= nScrollHight。
程序中,在外部div的scroll(滾動)事件中偵測和執行if判斷語句,是很是消耗CPU資源的。用鼠標拖拉滾動條,只要有一個像素的變更就會觸發該事件。但點擊滾動條兩頭的箭頭,事件觸發的頻率會低得多。因此滾動條的scroll事件要謹慎使用。
本示例判斷的是沒有水平滾動條的狀況,在有水平滾動條時,狀況會有細小的變化,因此nScrollTop + nDivHight >= nScrollHight語句中,須要用「>=」比較運算符,而沒有水平滾動條的時候,等號「=」就足夠了。你們能夠實際測試一下。還能夠判斷水平滾動條是否滾動到頭了。ajax
三、jQuery滾動條到達底部加載數據瀏覽器
msg_list_loading = false; $('.msg_list').on('scroll', function(){ if ( ! msg_list_loading ){ load_more_msg(); } }) function load_more_msg(){ var msg_list = $('.msg_list'); if (nScrollTop + paddingBottom + paddingTop + nDivHight >= nScrollHight ) { msg_list_loading = true; msg_list.append('<div class="loading"></div>'); $.get('ajax_data.html').done(function( data ){ msg_list.find(".loading").remove(); msg_list.append( data ); msg_list_loading = false; }); } }