Comments (25)
测试了下,css里面元素的最大高度大概为33554400px
,所以当列表数据非常多的时候,比如一千万,这种虚拟列表的实现方法无法滚动到最底部,这个算是一个bug吧
from blog.
发现两个问题
1.快速滚动或者直接拉到页面最下面,会直接白屏
2.this.cache会在来回滚动中越来越大
from blog.
请问一下当滑动过快的时候,页面会空白,这种如何解决
from blog.
看了下感觉应该不用这么麻烦,而且用的cache真的会越来越大
我的想法是这样的:
<div className="container" ref={containerRef} style={{ height: 400, width: 200 }}>
<div className="box" style={{ height: itemHeight * allData.length }}>
<div className="viewBox" style={{ paddingTop: startOffset }}>
{data.map((d) => (
<div key={d} className="item" style={{ height: itemHeight }}>
{d}
</div>
))}
</div>
</div>
</div>
from blog.
from blog.
受教啦。有2点和你交流下啊:
-
estimatedItemHeight 这个值是一个平均值的话,运气不好的话是否会出现问题呢?比如,前面几个都特别短,然后出现 item 没有占满屏幕。取一个元素的最小高度来计算 estimatedItemHeight,看起来最为保险,但是这样就导致要多渲染很多元素了。考虑到有 bufferSize 这个缓冲, estimatedItemHeight 的方案通常应该不会出什么问题。我这样理解应该对吧。😂
-
关于 bufferSize 这个值上一点提到了一个作用。另外一点,如果没有这个 bufferSize,那么用户往下滚动的时候,可能由于来不及渲染导致先看到一段空白,然后item才渲染出来吧。您文章提到的
bufferSize 是一个缓冲值,用来增加一定的缓存区域,让正常滑动速度的时候不会显得那么突兀。
,应该是这个意思吧。
from blog.
-
你说的情况是可能存在的。
estimatedItemHeight
取平均值是一个建议,对于你说的这种情况,可以不按照这个建议,譬如直接把estimatedItemHeight
设置成 30 这样子(react-virtualized 貌似就是这个默认值) ,另外如果按照取平均值的建议,那可以将 buffer 设置大一些,我觉得也能有效避免你说的这种情况。 -
是的
from blog.
请问博客可以转载么,会注明出处和作者,没有看到文章共享协议,所以问一下
from blog.
@nanhupatar 可以
from blog.
看完之后实现了一份。不由得说,这个实现真的让人惊艳
from blog.
记得若干年前一届 QCon 天猫上去特地讲了这个主题
不止是列表 offset / height 这些
就连滚动贝塞尔函数都是经过精密计算出来的。。。因为要自己模拟滚动。。。
from blog.
楼主没有发现自己动态滚动实现方案有bug吗
from blog.
是否必须要设置可视区域的高度才可以啊。我尝试了 react-window
,必须要设置高度
from blog.
虚拟列表还有个很极端的问题,就是浏览器的 Top 值和 height 都有一个极限的值,react-virtualize 的实现中,滚动都会修改列表中所有元素的 top 值,然后实现一个类似于放大镜的效果,在元素渲染时销毁后不会堆叠高度,不知道怎么才能优化得那么顺畅。
from blog.
我项目起来报错 require is not defined 我哭了
from blog.
from blog.
cache会越来越大,可以按照索引存一份,不要每次都push进去.
from blog.
cache会越来越大,可以按照索引存一份,不要每次都push进去.
LRUCache
from blog.
测试了下,css里面元素的最大高度大概为
33554400px
,所以当列表数据非常多的时候,比如一千万,这种虚拟列表的实现方法无法滚动到最底部,这个算是一个bug吧
这个不能算BUG吧?你原本那么多元素就支持不了这么长,这和加不加虚拟滚动没有关系吧?
from blog.
from blog.
from blog.
看了下感觉应该不用这么麻烦,而且用的cache真的会越来越大 我的想法是这样的:
<div className="container" ref={containerRef} style={{ height: 400, width: 200 }}> <div className="box" style={{ height: itemHeight * allData.length }}> <div className="viewBox" style={{ paddingTop: startOffset }}> {data.map((d) => ( <div key={d} className="item" style={{ height: itemHeight }}> {d} </div> ))} </div> </div> </div>
你好,想问下这图是用什么软件画的啊,很好看。
from blog.
from blog.
from blog.
from blog.
Related Issues (20)
- [译]JavaScript 的时间消耗 HOT 4
- Webpack 4 不完全迁移指北 HOT 23
- 从一道题浅说 JavaScript 的事件循环 HOT 36
- Nginx 上配置 HTTPS 环境 HOT 8
- 列表数据的展示优化 HOT 2
- 处理 undefined 值的7个建议 HOT 1
- How to escape async/await hell HOT 8
- 数制基础 HOT 1
- ES6 Class Methods 定义方式的差异 HOT 15
- 浅说 XSS 和 CSRF HOT 18
- 浅说移动前端中 Viewport 和 Viewport units HOT 4
- react-tiny-virtual-list的源码解读 HOT 5
- react-virtualized 组件的虚拟列表实现
- react-virtualized 组件的虚拟列表优化分析 HOT 1
- 图片和视频的懒加载 HOT 2
- 从 Hello World 看 RN 的启动流程(一) HOT 2
- 从 Hello World 看 RN 的启动流程(二) HOT 1
- 这样就产生了反射型 XSS 攻击。攻击者可以注入任意的恶意脚本进行攻击,可能注入恶作剧脚本,或者注入能获取用户隐私数据(如cookie)的脚本,这取决于攻击者的目的。
- dom型xss攻击中,我没有理解具体的危害。输入内容是用户自己控制的,即使他输入恶意内容,又能干些什么呢?能用一个具体的案例,讲下攻击者的什么行为给受害者造成了什么危害吗? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from blog.