检测滚动条是否在底部的代码存在问题,求排查及实现指定滚动功能
问题分析与修正方案
我来帮你拆解代码里的问题,顺便给出可运行的修正版本~
原代码的核心错误
你的条件判断逻辑完全写错了:
if ((this == [0].scrollHeight)) { ... }
这里有两个致命问题:
[0].scrollHeight是完全无效的语法,[0]单独使用没有指向任何元素,根本无法获取到滚动高度- 你要判断的是textarea是否滚动到底部,而不是把元素本身(
this)和某个高度值做比较
正确的判断逻辑
要判断一个元素是否滚动到底部,需要结合三个属性:
scrollTop:元素已经向上滚动的像素数clientHeight:元素的可见区域高度scrollHeight:元素内容的总高度(包括不可见部分)
当 scrollTop + clientHeight >= scrollHeight 时,就说明元素已经滚动到底部了(用>=而不是严格等于,是为了兼容浏览器渲染的微小误差)。
修正后的完整代码
$("#inp").keyup(function () { // 判断当前textarea是否滚动到底部 const isAtBottom = this.scrollTop + this.clientHeight >= this.scrollHeight; if (isAtBottom) { const outEl = $("#out")[0]; // 让输出div滚动到底部 outEl.scrollTop = outEl.scrollHeight; } });
额外优化说明
我把$("#out")[0]缓存成了变量outEl,避免重复调用jQuery选择器,能稍微提升一点性能,当然如果你的页面元素不多,不缓存也不会有太大问题。
内容的提问来源于stack exchange,提问作者user9152964
相关产品推荐
相关产品推荐

