如何判斷網頁是否已經滾動到瀏覽器底部了
有些需求中,需要當用戶滾動到瀏覽器底部的時候,再加載新的內容。筆者在這里介紹如何使用Jquery判斷用戶是否已經瀏覽到網頁的底部了。
在了解下面的知識點之前,筆者這里先介紹幾個概念。
- $(window).height(); //用于獲取瀏覽器顯示區域的高度
- $(window).width(); //用于獲取瀏覽器顯示區域的寬度
- $(document.body).height(); //獲取頁面文檔的高度
- $(document.body).width(); //獲取頁面文檔的寬度
- $(document).scrollTop(); //獲取垂直滾動條到頂部的垂直距離
- $(document).scrollLeft(); //獲取水平滾動條到左邊的水平距離
通過上面的知識點,可以知道:瀏覽器顯示區域的高度+垂直滾動條距離頂部距離<=網頁的高度。
有了這個結論,那么實現起來就容易了。下面的代碼實現了,判斷用戶是否瀏覽到了網頁的底部。
- $(window).scroll(function(){
- var h=$(document.body).height();//網頁文檔的高度
- var c = $(document).scrollTop();//滾動條距離網頁頂部的高度
- var wh = $(window).height(); //頁面可視化區域高度
- if (Math.ceil(wh+c)>=h){
- alert("我已經到底部啦");
- }
- })
如果需要判斷用戶是否已經瀏覽到某個元素的話,那么只需要把上面的網頁文檔高度,換成某一個元素距離網頁頂部的距離就可以了。例如:
- $(window).scroll(function(){
- var h=$("#div").offset().top;//id為div的元素距離網頁頂部的距離
- var c = $(document).scrollTop();//滾動條距離網頁頂部的高度
- var wh = $(window).height(); //頁面可視化區域高度
- if (Math.ceil(wh+c)>=h){
- alert("我已經到底部啦");
- }
- })
在這里讀者需要注意,判斷條件中,wh+c取得是滿足大于等于該數字的最小整數。經過筆者的測試,在IE7、8、9、11上都沒有問題。
接下來筆者把上面的代碼封裝為一個插件。
- (function ($) {
- //backcall是回調函數,count表示回調函數被執行的次數,count只有元素在屏幕范圍之外的時候才起作用
- $.fn.inBottom = function (backcall){
- //判斷當前元素是否在目前屏幕可視化區域之內
- if(this.offset().top >= $(window).height()){
- this.inScroll(backcall,count);
- }else{
- this.inWindow(backcall);
- }
- };
- //直接加載回調函數
- $.fn.inWindow = function (backcall){
- backcall();
- };
- //滾動監聽滑動條,元素滾動到屏幕底部的時候,加載回調函數
- $.fn.inScroll = function (backcall,count) {
- var $this=this;
- $(window).scroll(function(){
- //獲得這個元素到文檔頂部的距離
- var awayDocTop=$this.offset().top;
- //獲得滾動條的top
- var sTop=$(document).scrollTop();
- //獲得可視化窗口的高度
- var wh=$(window).height();
- if(Math.ceil(wh+sTop)>=awayDocTop){
- if(count>0){
- backcall();
- count--;
- }
- };
- });
- };
- })(jQuery);
然后讀者在引入上面的插件文件后,就可以通過類似于下面的代碼調用了。
- $("#div").inBottom(function(){
- alert("我被回調了");
- },1);