0

网格实现虚拟滚动时,根据下面的代码,当新数据附加到data数组时(一旦我们滚动并到达网格的最后一条记录),滚动就会重置到初始位置。

检查这个JSFiddle

scrollPositionChanged: function(s, e) {

    // if we're close to the bottom, add 10 items
    if (s.viewRange.bottomRow >= s.rows.length - 1) {
            addData(data, 20);
    s.collectionView.refresh();
  }
}

知道如何阻止这种行为吗?其他网格,如提供平滑的行为 - 一旦附加数据,前一条记录保留在视图中。实现类似的行为吗?

4

2 回答 2

1

您可以在刷新网格之前保存滚动位置并在滚动后恢复相同。

var pos;

var grid = new wijmo.grid.FlexGrid('#flex', {
  itemsSource: data,
  scrollPositionChanged: function (s, e) {
    // if we're close to the bottom, add 10 items
    if (s.viewRange.bottomRow >= s.rows.length - 1) {
      addData(data, 20);
      //save current scroll postion
      pos = grid.scrollPosition;
      s.collectionView.refresh();
    }

    //restore scroll position
    if (pos) {
      s.scrollPosition = Object.assign({}, pos);
      pos = null;
    }
  }
});

检查更新的小提琴:- http://jsfiddle.net/797tjc5u/

于 2018-02-26T10:01:46.973 回答
1

您需要在发出 http 请求之前存储滚动位置,并在将项目添加到 FlexGrid 后返回。

请参考以下更新的 fiddle 与 http 服务延迟模拟:

[http://jsfiddle.net/hwr2ra1q/41/][1]
于 2018-02-27T05:10:55.353 回答