梦见世界

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 

其实很简单我们只要使用到clientHeight、offsetHeight、scrollTop这三个参数就可以判断我们当前位置了,具体来给大家介绍一个例子。

例子,判断到底部

[javascript] view plaincopy
 
  1. $(window).scroll(function () {  
  2.     if ($(document).scrollTop() + $(window).height() >= $(document).height()) {  
  3.         alert("哦哦,到底了.");  
  4.     }  
  5. });  

 

如果要实现拉到底部自动加载内容。只要注册个滚动条事件:

首先,我们拉动滚动条,从最上面拉到最下面,变化的是scrollTop的值,而这个值是有一个区间的。
这个区间是: [0, (offsetHeight - clientHeight)]
即,滚动条拉动的整个过程的变化在 0 到 (offsetHeight – clientHeight) 范围之内。

1、判断滚动条滚动到最底端: scrollTop == (offsetHeight – clientHeight)
2、在滚动条距离底端50px以内: (offsetHeight – clientHeight) – scrollTop <= 50
3、在滚动条距离底端5%以内: scrollTop / (offsetHeight – clientHeight) >= 0.95

[javascript] view plaincopy
 
  1. scrollBottomTest =function(){  
  2.      $("#contain").scroll(function(){  
  3.          var $this =$(this),  
  4.          viewH =$(this).height(),//可见高度  
  5.          contentH =$(this).get(0).scrollHeight,//内容高度  
  6.          scrollTop =$(this).scrollTop();//滚动高度  
  7.         //if(contentH - viewH - scrollTop <= 100) { //到达底部100px时,加载新内容  
  8.         if(scrollTop/(contentH -viewH)>=0.95){ //到达底部100px时,加载新内容  
  9.         // 这里加载数据..  
  10.         }  
  11.      });  
  12. }  

js的判断

判断垂直滚动条是否到达底部
    廓清了以上的概念,编码其实就比较简单了, 以下是示例代码:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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"></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.        if(nScrollTop + nDivHight >= nScrollHight)  
  16.          alert("滚动条到底部了");  
  17.        });  
  18.    });  
  19.    </script>  
  20.  <body>  
  21.  <div id="div1" style="overflow-y:auto; overflow-x:hidden; height:500px;">  
  22.    <div style="background-color:#ccc; height:750px;">IE 和 FF 下测试通过</div>  
  23.  </div>  
  24.  </body>  
  25.  </html>  

    代码解说:
    内部div高度为750,外部div高度为500,所以垂直滚动条需要滚动750-500=250的距离,就会到达底部,参见语句nScrollTop + nDivHight >= nScrollHight。
    程序中,在外部div的scroll(滚动)事件中侦测和执行if判断语句,是非常消耗CPU资源的。用鼠标拖拉滚动条,只要有一个像素的变动就会触发该事件。但点击滚动条两头的箭头,事件触发的频率会低得多。所以滚动条的scroll事件要谨慎使用。
    本示例判断的是没有水平滚动条的情况,在有水平滚动条时,情况会有细小的变化,所以nScrollTop + nDivHight >= nScrollHight语句中,需要用“>=”比较运算符,而没有水平滚动条的时候,等号“=”就足够了。大家可以实际测试一下。还可以判断水平滚动条是否滚动到头了。

 

posted on 2015-10-01 11:39  梦见世界  阅读(245)  评论(0编辑  收藏  举报