- 问题描述:
公司用的是Material Ui,觉得蚂蚁表格的固定表头固定列很好,便阅读源码仿写,在表身滚动时,立即给表头节点设置scrollLeft属性,但是由于onScroll触发频率极高,表头滚动相对落后表身一点点,视觉效果较差,请问蚂蚁是如何做到表头和表身几乎无延迟同步滚动的
- 蚂蚁的代码
function forceScroll(scrollLeft, target) {
/* eslint-disable no-param-reassign */scrollLeft)
if (target && target.scrollLeft !== scrollLeft) {
target.scrollLeft = scrollLeft;
}
/* eslint-enable */
}
var onScroll = function onScroll(_ref2) {
var currentTarget = _ref2.currentTarget,
scrollLeft = _ref2.scrollLeft;
var mergedScrollLeft = typeof scrollLeft === 'number' ? scrollLeft : currentTarget.scrollLeft;
var compareTarget = currentTarget || EMPTY_SCROLL_TARGET;
debugger
if (!getScrollTarget() || getScrollTarget() === compareTarget) {
setScrollTarget(compareTarget);
forceScroll(mergedScrollLeft, scrollHeaderRef.current);
forceScroll(mergedScrollLeft, scrollBodyRef.current);
}
if (currentTarget) {
var scrollWidth = currentTarget.scrollWidth,
clientWidth = currentTarget.clientWidth;
setPingedLeft(mergedScrollLeft > 0);
setPingedRight(mergedScrollLeft < scrollWidth - clientWidth);
}
};