原理是只渲染可视区那十几行,滚动时按偏移量动态换内容,DOM 数量恒定所以不卡。
行高必须固定或可预估,否则算不出滚动位置;用绝对定位加 translateY 把行摆到位。
勾选状态要存在数据层,不能靠 DOM 是否渲染来判断,跳转用容器元素的滚动方法。
<div class="viewport" @scroll="onScroll" style="height:600px;overflow:auto">
<div :style="{height: rows.length * 40 + 'px'}">
<div v-for="r in visible"
:style="{transform: `translateY(${r.top}px)`}">{{ r.text }}</div>
</div>
</div>
THE END






暂无评论内容