JS如何判断滚动条是否滚到底部

本文详细解析了网页可见区域的不同测量方法(如clientWidth, offsetWidth等),以及offsetParent、offsetTop/Left的计算原理。重点讲解了滚动条位置和滚动到底部的判断技巧,并提供了JavaScript和jQuery示例。适合前端开发者深入理解布局和滚动处理。
网页可见区域宽: document.body.clientWidth; 
网页可见区域高: document.body.clientHeight; 

网页可见区域宽: document.body.offsetWidth   (包括边线的宽); 
网页可见区域高: document.body.offsetHeight  (包括边线的宽); 

网页正文全文宽: document.body.scrollWidth; 
网页正文全文高: document.body.scrollHeight; 

网页被卷去的高: document.body.scrollTop; 
网页被卷去的左: document.body.scrollLeft; 

网页正文部分上: window.screenTop; 
网页正文部分左: window.screenLeft; 

屏幕分辨率的高: window.screen.height; 
屏幕分辨率的宽: window.screen.width; 

屏幕可用工作区高度: window.screen.availHeight; 
屏幕可用工作区宽度:window.screen.availWidth;

关于offset共有5个东西需要弄清楚:
  1. offsetParent
  2. offsetTop
  3. offsetLeft
  4. offsetWidth
  5. offsetHeight

offsetWidth与offsetHeight

也就是元素的可视宽度,这个宽度包括元素的边框(border),水平padding,垂直滚动条宽度,元素本身宽度等

offsetWidth=(border-width)*2+(padding-left)+(width)+(padding-right)。
offsetHeight=(border-width)*2+(padding-top)+(height)+(padding-bottom)

offsetLeft与offsetTop

返回对象元素边界的左上角顶点相对于offsetParent的左上角顶点的水平偏移量。从这个定义中我们可以明确地知道offsetLeft与当前元素的margin-left和offsetParent的padding-left有关

offsetLeft=(offsetParent的padding-left)+(中间元素的offsetWidth)+(当前元素的margin-left)。
offsetTop=(offsetParent的padding-top)+(中间元素的offsetHeight)+(当前元素的margin-top)

offsetParent

  1. 如果当前元素的父级元素没有进行CSS定位(position为absolute或relative),offsetParent为body。
  2. 如果当前元素的父级元素中有CSS定位(position为absolute或relative),offsetParent取最近的那个父级元素。

滚动条到底部的条件即为scrollTop + clientHeight == scrollHeight。

function getScrollTop(){
  var scrollTop = 0, bodyScrollTop = 0, documentScrollTop = 0;
  if(document.body){
    bodyScrollTop = document.body.scrollTop;
  }
  if(document.documentElement){
    documentScrollTop = document.documentElement.scrollTop;
  }
  scrollTop = (bodyScrollTop - documentScrollTop > 0) ? bodyScrollTop : documentScrollTop;
  return scrollTop;
}
//文档的总高度
function getScrollHeight(){
  var scrollHeight = 0, bodyScrollHeight = 0, documentScrollHeight = 0;
  if(document.body){
    bodyScrollHeight = document.body.scrollHeight;
  }
  if(document.documentElement){
    documentScrollHeight = document.documentElement.scrollHeight;
  }
  scrollHeight = (bodyScrollHeight - documentScrollHeight > 0) ? bodyScrollHeight : documentScrollHeight;
  return scrollHeight;
}
function getWindowHeight(){
  var windowHeight = 0;
  if(document.compatMode == "CSS1Compat"){
    windowHeight = document.documentElement.clientHeight;
  }else{
    windowHeight = document.body.clientHeight;
  }
  return windowHeight;
}
window.onscroll = function(){
  if(getScrollTop() + getWindowHeight() == getScrollHeight()){
    alert("已经到最底部了!!");
  }
};

//jquery
$(window).scroll(function(){
  var scrollTop = $(this).scrollTop();
  var scrollHeight = $(document).height();
  var windowHeight = $(this).height();
  if(scrollTop + windowHeight == scrollHeight){
    alert("已经到最底部了!");
  }
});

转载自吴小小的文章:https://www.cnblogs.com/yangwang12345/p/7798084.html

判断滚动条是否滚动底部是否向上滚动可以采用不同的方法,以下是具体介绍: ### 判断滚动条是否滚动底部 #### jQuery检测浏览器window滚动条到达底部 可以通过比较`$(document).scrollTop()`、`$(document).height()`和`$(window).height()`的值来判断。代码如下: ```javascript $(document).ready(function() { $(window).scroll(function() { if ($(document).scrollTop() >= $(document).height() - $(window).height()) { alert("滚动条已经到达底部为" + $(document).scrollTop()); } }); }); ``` 这里,`$(document).scrollTop()`获取匹配元素相对滚动条顶部的偏移,`$(document).height()`获取整个页面的高度,`$(window).height()`获取当前浏览器所能看到的页面的那部分的高度[^1]。 #### jQuery检测div中滚动条到达底部 对于特定的`div`元素,可以通过比较`scrollTop`、`scrollHeight`和`height`的值来判断。示例代码如下: ```javascript $(".msgList").scroll(function(){ var scrollTop = $(this).scrollTop(); var scrollHeight = $(this)[0].scrollHeight; var windowHeight = $(this).height(); if(scrollTop + windowHeight == scrollHeight){ alert("滚动底部"); } }); ``` 其中,`scrollTop`是滚动条在Y轴上的滚动距离,`scrollHeight`是内容可视区域的高度加上溢出(滚动)的距离,`height`是元素可见高度[^2]。 #### JavaScript检测元素滚动条到达底部 在JavaScript中,判断某一个元素中的滚动条是否底部,可将`document.body`换成特定的元素,获取`scrollTop`和`scrollHeight`的方式与上述类似,获取元素可见高度需要用到`offsetHeight`属性。滚动条底部的条件是`scrollTop + clientHeight == scrollHeight`,其中`scrollTop`是滚动条在Y轴上的滚动距离,`clientHeight`是内容可视区域的高度,`scrollHeight`是内容可视区域的高度加上溢出(滚动)的距离[^3][^4]。 ### 判断滚动条是否向上滚动 可以通过记录上一次滚动条的位置,与当前滚动条位置进行比较来判断滚动方向。示例代码如下: ```javascript var lastScrollTop = 0; $(window).scroll(function() { var st = $(this).scrollTop(); if (st < lastScrollTop) { console.log("滚动条向上滚动"); } lastScrollTop = st; }); ``` 这里,`lastScrollTop`用于记录上一次滚动条的位置,`st`是当前滚动条的位置,当`st < lastScrollTop`时,表示滚动条向上滚动[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值