前端开发常常会遇到监听窗口滚动事件的状况,检测到页面滚动间隔做一些操作。有时候也会监听一些容器的滚动如: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滚动高度》