当div内部和外部均有滚动条时,内部滚动条滚动到底部后,会触发外部的滚动条。常见的场景包括,一个弹窗,其中包含一个div,这个div内部有滚动条,当我们鼠标移入div内部进行滚动时,一不小心滚动到底div的底部后,会发现弹窗的滚动条也跟着下去了,这样体验就十分的不友好了,我们想要的到效果是,当鼠标在div内部进行滚动时,滚动到底部后停止动作,而当鼠标不在div内部时,滚动触发的是弹窗的滚动条。
实现思路:
根据现象,当内部滚动条触底时,才会引发外部的滚动操作,如果让内部的滚动条不进行触底操作,则可以实现这个功能了。
具体方案:
<div @scroll="dropDownScrollFun"></div> // 下拉框滚动条监听 dropDownScrollFun(val) { // 获取下拉框对象 const scroll = document.querySelector('.dropDown-' + this.refName + '-scroll') /** * 处理div内部滚动条滚动到底部后导致 再次滚动时触发外部的滚动条 * 处理方法为: * 当前内部滚动条滚动到距离底部小于等于2px时,将其滚动条位置 重置为距离底部2px * scrollTop: 可视区域顶部与滚动条顶部的距离 * scrollHeight: 整个滚动条的高度 * clientHeight: 可视区域的高度 */ // 当前滚动条距离底部还剩2px时 if (scroll.scrollHeight - (scroll.scrollTop + scroll.clientHeight) <= 2) { // 定位到距离底部2px的位置 scroll.scrollTop = (scroll.scrollHeight - scroll.clientHeight - 2) } }
发表评论