监听div滚动高度

前端开发经常会遇到监听窗口滚动事件的情况,检测到页面滚动距离做一些操作。有时候也会监听一些容器的滚动如:div,与前者有一些差别,本文会先后介绍这两种情况如何实现。

监听窗口的滚动

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>window滚动事件</title>
</head>
<body style="height: 2000px;">

<button onclick="scrollWindow()" style="position: fixed; bottom: 0px;">返回顶部</button>

<script>
// 想在页面滚动的时候获取相关信息,试试下面的操作
window.onscroll = () => {
    console.log('document.documentElement.scrollTop:', document.documentElement.scrollTop)
    // todo 处理具体的页面逻辑
}

function scrollWindow() {
    document.documentElement.scrollTop = 0
}
</script>
</body>
</html>

监听div容器的滚动

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #box {
            height: 200px;
            width: 300px;
            overflow: scroll;
            width: 300px;
            background-color: aliceblue;
        }

        .content {
            width: 100%;
            height: 400px;
            background-color: antiquewhite;
        }
    </style>
</head>
<body>
    <div id="box">
        <div class="content">
          比父级高的容器
        </div>
    </div>
    <div>
        <textarea id="text"></textarea>
    </div>
    <button onclick="append()">send</button>
    <button onclick="toTop()">toTop</button>
    <script>
        var element = document.getElementById('box');

        element.addEventListener('scroll', function(e) {
            console.log('e.target.scrollTop:', e.target.scrollTop)
        })

        function toTop() {
            element.scrollTop = 0
        }

        function append() {
            let p = document.createElement("p");
            let val = document.getElementById('text').value
            var textnode=document.createTextNode(val);
            p.appendChild(textnode);
            element.appendChild(p)
            document.getElementById('text').value = ''
            // 滚动到底部
            element.scrollTop = element.scrollHeight;
        }
        
    </script>
</body>
</html>

可以看出,父容器需要设置有限的高度且overflow: scroll; 当子元素的高度超过父级才会出现滚动条。这样父级滚动触发scroll事件。

让父容器回到顶部只需设置element.scrollTop = 0即可。

有一些聊天室的场景,想要最新消息出现在容器底部设置element.scrollTop = element.scrollHeight;即可。

文章首发于我的博客-《监听div滚动高度》


web开发总结
不积跬步无以至千里

纸上得来终觉浅,绝知此事要躬行

473 声望
27 粉丝
0 条评论
推荐阅读
onMounted is called when there is no active component 已解决
If you are using async setup(), make sure to register lifecycle hooks before the first await statement.

来了老弟阅读 134

涨姿势了,有意思的气泡 Loading 效果
今日,群友提问,如何实现这么一个 Loading 效果:这个确实有点意思,但是这是 CSS 能够完成的?没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元素可能多点。参考我们...

chokcoco20阅读 2.1k评论 2

在前端使用 JS 进行分类汇总
最近遇到一些同学在问 JS 中进行数据统计的问题。虽然数据统计一般会在数据库中进行,但是后端遇到需要使用程序来进行统计的情况也非常多。.NET 就为了对内存数据和数据库数据进行统一地数据处理,发明了 LINQ (L...

边城17阅读 1.9k

封面图
你可能不需要JS!CSS实现一个计时器
CSS现在可不仅仅只是改一个颜色这么简单,还可以做很多交互,比如做一个功能齐全的计时器?样式上并不复杂,主要是几个交互的地方数字时钟的变化开始、暂停操作重置操作如何仅使用 CSS 来实现这样的功能呢?一起...

XboxYan21阅读 1.6k评论 1

封面图
「彻底弄懂」this全面解析
当一个函数被调用时,会创建一个活动记录(有时候也称为执行上下文)。这个记录会包含函数在 哪里被调用(调用栈)、函数的调用方法、传入的参数等信息。this就是记录的其中一个属性,会在 函数执行的过程中用到...

wuwhs17阅读 2.4k

封面图
学会这些 Web API 使你的开发效率翻倍
随着浏览器的日益壮大,浏览器自带的功能也随着增多,在 Web 开发过程中,我们经常会使用一些 Web API 增加我们的开发效率。本篇文章主要选取了一些有趣且有用的 Web API 进行介绍,并且 API 可以在线运行预览。C...

九旬13阅读 1.6k

封面图
用了那么久的 SVG,你还没有入门吗?
其实在大部分的项目中都有 直接 或 间接 使用到 SVG 和 Canvas,但是在大多数时候我们只是选择 简单了解 或 直接跳过,这有问题吗?没有问题,毕竟砖还是要搬的!

熊的猫17阅读 1.5k评论 2

封面图

纸上得来终觉浅,绝知此事要躬行

473 声望
27 粉丝
宣传栏