学习实现虚拟列表的过程中,让类名为holder的元素不占据高度的情况下,发现页面在往下滚动的过程中出现滚动条抖动的问题,并且是反复抽搐,为什么会出现这样的情况
export default function VirtualList() { const [position, setPosition] = useState({ start: 0, end: 0 }); const [data, setData] = useState([]); const listBoxRef = useRef(); const contentRef = useRef(); const scrollInfo = useRef({ itemHeight: 60, bufferCount: 8, renderCount: 0 }); useEffect(() => { const { itemHeight, bufferCount } = scrollInfo.current; const { height } = listBoxRef.current.getBoundingClientRect(); const renderCount = Math.ceil(height / itemHeight) + bufferCount; const dataList = new Array(10000).fill(0).map((_, index) => index + 1); scrollInfo.current = { ...scrollInfo.current, renderCount }; setData(dataList); setPosition({ start: 0, end: renderCount }); }, []); const handleScroll = () => { const { itemHeight, renderCount } = scrollInfo.current; const scrollTop = listBoxRef.current.scrollTop; console.log('scrollTop', scrollTop); const start = Math.floor(scrollTop / itemHeight); const end = start + renderCount; // contentRef.current.style.transform = `translate3d(0, ${scrollTop}px, 0)`; if (start !== position.start || end !== position.end) { setPosition({ start, end }); } }; console.log(position); const { itemHeight } = scrollInfo.current; return ( <div className="list-box" ref={listBoxRef} onScroll={handleScroll}> <div className="holder" style={{ height: `${itemHeight * data.length}px` }} ></div> <div className="content-area" ref={contentRef}> {data.slice(position.start, position.end).map((item) => ( <div key={item} className="item"> {item} </div> ))} </div> </div> );}
.item { list-style: none; background-color: #fc4838; padding: 10px 20px; color: #fff; height: 50px; line-height: 50px; box-sizing: border-box; margin-bottom: 10px; margin-left: 24px; margin-right: 24px; font-weight: bold; border-radius: 10px;}.list-box { position: fixed; left: 0; right: 0; top: 20px; bottom: 0; overflow: scroll;}.holder { position: absolute; top: 0; left: 0; right: 0;}
浏览器滚动锚点导致,要么你每次滚动后重设scrollTop
,要么css取消滚动锚点:overflow-anchor: none
本文向大家介绍vue实现列表滚动的过渡动画,包括了vue实现列表滚动的过渡动画的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Vue实现列表滚动过渡动画的具体代码,供大家参考,具体内容如下 效果图 失帧比较严重,在手机上效果更佳。 原理分析 这个滚动页面由两个部分布局(底部固定的Tab页面除外)。一个是顶部的banner轮播,一个是下面的列表。这里的重点是做列表的动画,banner轮
本文向大家介绍怎么让table的thead 不动,tbody出现滚动条呢?相关面试题,主要包含被问及怎么让table的thead 不动,tbody出现滚动条呢?时的应答技巧和注意事项,需要的朋友参考一下
vue怎么实现滚动条隐藏但有滚动效果
现在的情况是:当内部滚动条滚动到底部时如果继续滚动,外部滚动条不会滚动,需要停顿或者移动鼠标滚动才能触发外层滚动条
当我使用JFileChooser时,第一次使用它的滚动条时,我会得到以下错误消息的两到四个副本: 以下是具有此行为的示例代码: 我的Swing程序继续运行(大部分),但这让我感到困扰。这是什么原因造成的,我该如何避免? Mac OS X 10.11.2 El Capitan java version“1.8.0\u 66” java(TM)SE Runtime Environment(build
本文向大家介绍虚拟机linux安装redis实现过程解析,包括了虚拟机linux安装redis实现过程解析的使用技巧和注意事项,需要的朋友参考一下 redis官网 website-adress 安装步骤 1.先按照官网下方的weget命令把redis下载下来 接着如果没猜错,你会在make命令上出错 由于redis是C写的,所以需要装上c的运行环境 yum install gcc-c++ 接着你还