javascript - React Virtualized 列表在滚动时是否可以捕捉到整行?

标签 javascript reactjs react-virtualized

我有一个 React 虚拟化 <List>用作下拉菜单的组件。我希望列表一次滚动整行,就像普通的操作系统级菜单一样,或者至少在滚动停止时捕捉到整行。

我设置了scrollToAlignment="top" ,认为这可能会做到这一点,但现在我意识到设置 scrollToIndex 时弄乱了滚动行为.

有一个onScroll事件,我想如果在某个窗口内没有收到另一个事件,我可以设置一个超时来触发,然后强制 scrollTop显示整行。但我希望有一种更干净的方法来做到这一点。

可能的解决方案

类似于 brianvaughn 的 answer below ,我使用 onScroll 整理了一个解决方案事件来调用捕捉 scrollTop 的去抖函数短暂延迟后增加整行:

const RowHeight = 45;

const ResultsList = React.createClass({
    list: null,

    snapRows: _.debounce(function(scrollTop)
    {
        this.list.scrollToPosition(Math.round(scrollTop / RowHeight) * RowHeight);
    }, 100),

    handleRef: function(ref)
    {
        this.list = ref;
    },

    onScroll: function(event)
    {
        this.snapRows(event.scrollTop);
    },

    rowRenderer: function(data)
    { ... },

    render: function()
    {
        var props = this.props;

        return <List
            ref={this.handleRef}
            width={490}
            height={450}
            rowCount={props.items.length}
            rowHeight={RowHeight}
            rowRenderer={this.rowRenderer}
            scrollToIndex={props.selectedIndex}
            onScroll={this.onScroll}
            {...props}
        />
    }
});

但我对此并不满意。滚动末尾的卡扣有点分散注意力,如果您仍然按住滚动条拇指,可能会感觉有点奇怪。

我认为,让您感觉像是在更新项目列表而不是平滑滚动页面的唯一方法是处理滚动事件并手动定位元素,以便行始终捕捉到偶数行增量。我在 IE5 时代就构建了一个类似的虚拟列表,但希望有一个更现代的实现。 :)

最佳答案

这不是我之前实现过的用例,所以我没有考虑太多,但是您可以使用去抖动的onScroll onSectionRendered 处理程序调用scrollToCell并捕捉到特定行。

编辑:这是我所讨论内容的一个粗略示例:https://codesandbox.io/s/545y634jxx

关于javascript - React Virtualized 列表在滚动时是否可以捕捉到整行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46244380/

相关文章:

javascript - 打开网页时自动下载 pdf

javascript - 关于部署前端项目的困惑

twitter-bootstrap - 在使用 webpack 进行 React 时导入 bootstrap

reactjs - 路由器事件在构造函数上使用时会导致错误警告 : Can't perform a React state update on an unmounted component

javascript - 第二次使用 `scrollToIndex` 跳回索引

javascript - (#200) 用户未授权应用程序执行此操作

javascript - React-router-dom 不呈现在 switch 中的自定义组件之后定义的路由

javascript - 在 React 构造函数中访问 props

javascript - React-virtualized - 调用 Grid 上的公共(public)方法

reactjs - React 虚拟化列表滚动到 View 之外