xiaosongmao123

Results 6 comments of xiaosongmao123

补充一点,我知道在虚拟列表状态下,只显示了约30个真实的节点(前10行不可见,中间10行可见,后10行不可见),所以当滚动时会导致节点刷新 但是,如上截图,我只是滚动了一点点(一行?两行?)也会导致节点刷新,这个是不是不太合理? 应该是,滚动在一定范围内不会刷新(5行内),滚动超过一定范围(向下滚动超过5行)刷新。因为此时一共有30行节点,不应该滚动一点点就刷新30行。

![list](https://user-images.githubusercontent.com/41795713/194200512-5a2b8f00-56a3-4787-8e65-4fa4eb3ac56a.png) 首先是增大 buffer 我截图的是官网实例,默认是buffer=10 (实际数了一下,共30个节点) 如图所示,当前显示的是第13行,说明前面有12行(不可见),后面有12行(不可见)。前后12行这个Buffer已经够大了 ----- 然后是选中丢失问题,选中第13行的文字,向下或向上滚动50px即可重现丢失(甚至第13行都没有说滚动到不可见区域) 这个说明节点刷新的逻辑是有问题的(节点刷新才导致选中丢失对吧?) 如图: ![scroll](https://user-images.githubusercontent.com/41795713/194201229-b475124e-0ecb-4e92-abc1-019aef885e90.gif)

我没翻代码啊,仅仅说感觉,感觉就是: `onscroll --> 计算显示节点 --> 删除旧节点刷新显示新节点 --> 设置scrollTop = Position` 正确的逻辑应该是: `onscroll --> 计算显示节点 --> 判断是否需要刷新 --> 需要刷新,删除刷新 --> 设置scrollTop = Position` 其中`判断是否需要刷新`逻辑是 1.计算出当前不需要刷新的区域(可视区域+前面5行区域+后面5行区域) 2.判断滚动后的Position,是否处于不需要刷新的区域 2.1处于,直接滚动 2.2超出,需要重新计算显示节点 ---- 按照如上逻辑,当我增大Buffer时,例如设置为100,不需要刷新的区域变为(可视区域+前面35行区域+后面35行区域) 此时,我至少可以自由的选中60-70行....

Use the keyboard keys to navigate to select the file. Press Enter to open the folder ![键盘选择](https://github.com/aleksey-hoffman/sigma-file-manager/assets/41795713/0a4bb8c6-6956-4ad7-bbca-903baface9dd)

Thank you for your work and for bringing us such a surprise