From 06a8d7f6ff842c98f313c8cc2ef5bd0fc75b9209 Mon Sep 17 00:00:00 2001 From: gx-mac Date: Tue, 2 Mar 2021 16:37:36 +0800 Subject: [PATCH] fix: recalculate scrolltop when scroll.y changes --- src/Table.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/Table.js b/src/Table.js index c550dbb..5356367 100644 --- a/src/Table.js +++ b/src/Table.js @@ -276,11 +276,22 @@ class Table extends Component { if (prevScrollY && currentScrollY && (prevScrollY !== currentScrollY) && this.props.lazyLoad && !this.props.ignoreScrollYChange) { this.bodyTable.scrollTop = 0 } else if (this.props.ignoreScrollYChange && currentScrollY && prevScrollY && (prevScrollY !== currentScrollY)) { - const distance = this.bodyTable.scrollTop + (currentScrollY - prevScrollY) - if (distance < 0) { - this.bodyTable.scrollTop = 0 + const bodyScrollTop = this.bodyTable.scrollTop + if (bodyScrollTop === 0) { // 在顶部的时候,滚动条不用动 + this.bodyTable.scrollTop = 0; } else { - this.bodyTable.scrollTop = distance + const distance = bodyScrollTop + currentScrollY - prevScrollY; + if (distance < 0) { + this.bodyTable.scrollTop = 0; + } else { + const { scrollHeight, scrollTop } = this.bodyTable + const bottomDistance = Math.abs(scrollHeight - scrollTop - prevScrollY) // 在最底部的时候也不用滚动滚动条 + if (bottomDistance < 5) { // 有些dom计算不是十分精确,设置一个值来缓冲一下 + this.bodyTable.scrollTop = scrollTop + prevScrollY - currentScrollY + } else { + this.bodyTable.scrollTop = distance; + } + } } } // 是否传入 scroll中的y属性,如果传入判断是否是整数,如果是则进行比较 。bodyTable 的clientHeight进行判断