感觉写得不是很好,最近要新写一个手机项目,感觉上面不是用得很舒服,然后就新写了一个,改动不是很大。
判断到底部
1 2 3 4 5 |
$(window).scroll(function () { if ($(document).scrollTop() + $(window).height() >= $(document).height()) { alert("哦哦,到底了."); } }); |
如果要实现拉到底部自动加载内容。只要注册个滚动条事件:
首先,我们拉动滚动条,从最上面拉到最下面,变化的是scrollTop的值,而这个值是有一个区间的。
这个区间是: [0, (offsetHeight – clientHeight)]
即,滚动条拉动的整个过程的变化在 0 到 (offsetHeight – clientHeight) 范围之内。
1、判断滚动条滚动到最底端: scrollTop == (offsetHeight – clientHeight)
2、在滚动条距离底端50px以内: (offsetHeight – clientHeight) – scrollTop < = 50 3、在滚动条距离底端5%以内: scrollTop / (offsetHeight – clientHeight) >= 0.95
1 2 3 4 5 6 7 8 9 10 11 12 |
scrollBottomTest =function(){ $("#contain").scroll(function(){ var $this =$(this), viewH =$(this).height(),//可见高度 contentH =$(this).get(0).scrollHeight,//内容高度 scrollTop =$(this).scrollTop();//滚动高度 //if(contentH - viewH - scrollTop < = 100) { //到达底部100px时,加载新内容 if(scrollTop/(contentH -viewH)>=0.95){ //到达底部100px时,加载新内容 // 这里加载数据.. } }); } |
判断垂直滚动条是否到达底部
理清了以上的概念,编码其实就比较简单了, 以下是示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<script language="javascript" 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; if(nScrollTop + 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> |
内部div高度为750,外部div高度为500,所以垂直滚动条需要滚动750-500=250的距离,就会到达底部,参见语句nScrollTop + nDivHight >= nScrollHight。
程序中,在外部div的scroll(滚动)事件中侦测和执行if判断语句,是非常消耗CPU资源的。用鼠标拖拉滚动条,只要有一个像素的变动就会触发该事件。但点击滚动条两头的箭头,事件触发的频率会低得多。
所以滚动条的scroll事件要谨慎使用。
评论前必须登录!
注册