JS 获取滚动条当前状态

举报
林欣 发表于 2024/08/31 16:03:01 2024/08/31
【摘要】 在JavaScript中,判断一个元素是否无法滚动(即已经滚动到顶部或底部),可以通过检查该元素的scrollTop属性与scrollHeight和clientHeight之间的关系来实现。scrollTop表示元素内部被卷上去的高度,scrollHeight是元素内容的总高度(包括不可见部分),而clientHeight是元素内部的高度,包括padding但不包括border、margin...

在JavaScript中,判断一个元素是否无法滚动(即已经滚动到顶部或底部),可以通过检查该元素的scrollTop属性与scrollHeightclientHeight之间的关系来实现。scrollTop表示元素内部被卷上去的高度,scrollHeight是元素内容的总高度(包括不可见部分),而clientHeight是元素内部的高度,包括padding但不包括border、margin、horizontal scrollbar(如果存在的话)、或::before/::after伪元素的高度。

判断元素是否滚动到顶部

如果元素已经滚动到顶部,那么scrollTop的值应该为0(或者非常接近0,考虑到可能的浮点数精度问题)。

function isScrolledToTop(element) {
    return element.scrollTop === 0;
}

判断元素是否滚动到底部

要判断元素是否滚动到底部,可以比较scrollTop加上clientHeight是否等于或大于scrollHeight

function isScrolledToBottom(element) {
    return element.scrollTop + element.clientHeight >= element.scrollHeight;
}

示例

以下是一个简单的示例,展示了如何在一个可滚动的div元素上应用这些函数:

HTML:

<div id="scrollableDiv" style="height: 200px; overflow-y: auto;">
    <!-- 足够的内容以使其可滚动 -->
    <div style="height: 1000px;">滚动内容...</div>
</div>
<button onclick="checkScroll()">检查滚动位置</button>

JavaScript:

function checkScroll() {
    var scrollableDiv = document.getElementById('scrollableDiv');
    if (isScrolledToTop(scrollableDiv)) {
        console.log('已经滚动到顶部');
    } else if (isScrolledToBottom(scrollableDiv)) {
        console.log('已经滚动到底部');
    } else {
        console.log('在中间位置');
    }
}

function isScrolledToTop(element) {
    return element.scrollTop === 0;
}

function isScrolledToBottom(element) {
    return element.scrollTop + element.clientHeight >= element.scrollHeight;
}

在这个示例中,我们有一个可滚动的div元素,并添加了一个按钮来检查该元素当前的滚动位置。点击按钮时,会调用checkScroll函数,该函数使用isScrolledToTopisScrolledToBottom函数来判断元素是否滚动到了顶部或底部,并打印相应的消息到控制台。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。