计算具有不同行高的网格中的滚动条高度

发布于 2024-11-30 13:48:19 字数 548 浏览 0 评论 0原文

我的网格有很多行(例如 1 000 000)。每行的高度可以是唯一的。但大多数行具有相同的高度。因此不可能确定每行的高度并获得总网格高度。

我需要在该网格上实现平滑的垂直滚动,而不仅仅是跳过行,因为行可以高于可见区域。

我的解决方案是:

  1. 获取行数
  2. 每行分为10份
  3. =>滚动条最大值是(行数)*10
  4. 从滚动位置我得到:
    • 第一个可见行 =(滚动位置)/ 10
    • 第一个可见行移位 =(滚动位置)% 10

如果所有行具有 +- 相同的高度,则效果很好。如果其中一行的高度为 500 像素,而另一行的高度为 25 像素,则滚动看起来很糟糕。

有人建议如何更好地解决这个问题吗?

网格在这里: http://img560.imageshack.us/img560/7775/scroll.png

I've grid with a lot of rows (e.g. 1 000 000). Height of each row may be unique. But most of rows has same height. So it's not possible to determine height of each row and get total grid height.

I need implement smooth vertical scrolling over this grid, not only jump over row, because row can be higher than visible area.

My solution is:

  1. get number of rows
  2. each row is divided into 10 parts
  3. => scroll bar max value is (number of rows)*10
  4. from scroll position I get :
    • first visible row = (scroll position) / 10
    • first visible row shift = (scroll position) % 10

This work fine, if all rows has +- same height. If there is one row with height 500 px and other has 25 px scroll looks awful.

Has anybody suggestion how to better solve this problem?

Grid is here :
http://img560.imageshack.us/img560/7775/scroll.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谜兔 2024-12-07 13:48:19

让滚动以像素为单位:

  • 将所有行的总高度相加,并将滚动条最大值设置为该值。
  • 将第一个可见行索引缓存在变量中。
  • 当用户向上或向下滚动时,您可以从当前第一个可见行开始顺序扫描以查找新行。这为顺序读取的每次更新提供了摊销的恒定时间工作。
  • 您不会频繁地进行随机访问(例如滚动到第 N 行),因此当您这样做时进行线性搜索就可以了。如果您需要更快的东西(我对此表示怀疑),那么您可以预先计算行高的部分和并进行二分搜索。

Let the scroll be in pixel units:

  • Sum the total height of all the rows and set the scrollbar max value to that value.
  • Cache the first visible row index in a variable.
  • When the user scrolls up or down, you can scan sequentially from the current first visible row to find the new one. This gives amortized constant-time work per update for sequential read.
  • You won't do random access (e.g. scroll to row number N) frequently so doing a linear search when you do is fine. If you need something faster (I doubt that) then you can pre compute the partial sums of row heights and do binary search.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文