【问题标题】:ui-scroll two table using the same datasource and scrolling in sync of both tablesui-scroll 使用相同数据源的两个表并同步滚动两个表
【发布时间】:2019-03-29 08:18:00
【问题描述】:

我在我的应用程序中使用ui-scroll 并遇到了一些问题。

我想在用于构建两个表的同一数据源上运行 ui-scroll,并且通过滚动一个表,它还应该滚动通过同一数据源创建的另一个表。

我尝试使用以下示例代码来实现这一点,但它不起作用。

当滚动任何表格时,列表的行为很奇怪;它会增加列表的大小并显示空行。它可以在附加的 plunker 中注意到。

如果我更改数据,它只会影响第一个表,而第二个不会更新列表。

我也无法同步(抱歉这个愚蠢的问题,如果有人可以帮忙的话)。

这是我的做法:

模板:

<table border="1"> 
  <tbody>
    <td>
      <table> 
        <tbody id="first-tbody" ui-scroll-viewport style="height: 400px">
          <tr ui-scroll="item in datasource" adapter="adapter" start-index="0">
            <td>{{item}}</td>
          </tr>
        </tbody>
      </table>
    </td>
    <td> 
      <table>
        <tbody id="second-tbody" ui-scroll-viewport style="height: 400px">
          <tr ui-scroll="item in datasource" adapter="adapter2" start-index="0">
            <td>{{item}}</td>
          </tr>
        </tbody>
      </table>
    </td>
  </tbody>
</table>

控制器:

var datasource = {};
datasource.get = function (index, count, success) {
    $timeout(function () {
        var result = [];
        for (var i = index; i <= index + count - 1; i++) {
            result.push("item #" + i);
        }
        success(result);
    }, 100);
};
$scope.datasource = datasource;

https://plnkr.co/edit/CBPDlqx5P6Rc4tPZzGaw?p=preview

任何帮助将不胜感激。 TIA

当滚动太快时,ui-scroll 为某些滚动计算添加的第一行和最后一行的高度往往大于 100 像素。如何解决它们?我可以隐藏它们吗?

这是显示其外观的图片:

【问题讨论】:

    标签: javascript angularjs html-table angular-ui ui-scroll


    【解决方案1】:

    在这些模板中显示 css-property 出现问题,将两个视口提取到单独的 div 容器中似乎是个好主意...以下代码修复了空行问题:

    <table border="1"> 
      <tbody>
        <td>
          <div ui-scroll-viewport style="height: 400px;">
            <table> 
              <tbody id="first-tbody" >
                <tr ui-scroll="item in datasource" adapter="adapter" start-index="0">
                  <td>{{item}}</td>
                </tr>
              </tbody>
            </table>
          </div>
        </td>
        <td> 
          <div ui-scroll-viewport style="height: 400px;">
            <table>
              <tbody id="second-tbody" >
                <tr ui-scroll="item in datasource" adapter="adapter2" start-index="0">
                  <td>{{item}}</td>
                </tr>
              </tbody>
            </table>
          </div>
        </td>
      </tbody>
    </table>
    

    更新的演示在这里:https://plnkr.co/edit/JjAiw3zvG4uIWGNjLUU7


    关于 2 个视口滚动同步,我猜,以下方法可能有效:

    $scope.datasource = {};
    $scope.datasource.get = function (index, count, success) {
        var result = [];
        for (var i = index; i <= index + count - 1; i++) {
            result.push("item #" + i);
        }
        success(result); 
    };
    
    const vp1 = document.getElementById('vp1');
    const vp2 = document.getElementById('vp2');
    vp1.addEventListener('scroll', function() {
        vp2.scrollTop = vp1.scrollTop;
    });
    

    其中“vp1”和“vp2”是视口的ID。

    【讨论】:

    • 感谢您的回答,但是如何解决同步问题?除了使用 ui 滚动之外,我如何使两个表的滚动同步。
    • 哇,谢谢 :) 我已经实施了您的解决方案,效果很好,但是 ui-scroll 仍然存在小问题。如果我滚动得太快,则 ui-scroll 添加的开头和结尾处的空行往往具有大于 100px 的高度。我在原始问题中添加了图片以供参考。很抱歉反复询问问题。
    • @arsinawaz 这些填充元素在滚动条内部控制下,通常不能在运行时之外维护。看起来您在复杂情况下的行为不一致,难以调试。但我认为,如果你知道你的数据集边界,在 ui-scroll 初始化时将 datasource.minIndexdatasource.maxIndex 设置为适当的值可能会稳定滚动条参数的一致性。
    • @dhlit 我尝试使用datasource.minIndexdatasource.maxIndex 但它似乎并没有解决这种情况,两个卷轴也没有完全同步。不知何故,正在滚动的表格比其他表格移动得更快,即使在最初的几次滚动之后,滚动位置也不同。任何帮助将不胜感激..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多