正如 Kem 指出的,在 scrollIntoView 之后的“scrollToRight”效果很烦人。在我之后,Kem 的解决方案提供了比基本解决方案更好的行为,因为通常表中的第一列更有意义。我改进了一点他的方法,通过在应用滚动然后滚动到它之前计算左侧的第一个可见列,水平滚动到我们想要可见的行的第一列。
最后一点:绝对左侧的列针对“51”进行测试。这是我通过查看浏览器的开发者工具中的 JS 值“实验性地”发现的一个值,我认为这取决于表格的样式,您可能需要更改/计算它。
代码下方:
public void scrollIntoView(T next) {
int index = datagrid.getVisibleItems().indexOf(next);
NodeList<TableCellElement> cells = datagrid.getRowElement(index).getCells();
int firstVisibleIndex = -1;
for(int i=0; i<cells.getLength() && firstVisibleIndex<0;i++)
if(UIObject.isVisible(cells.getItem(i)) && (cells.getItem(i).getAbsoluteLeft() > 51) && (cells.getItem(i).getAbsoluteTop() > 0))
firstVisibleIndex = i;
cells.getItem(firstVisibleIndex>=0? firstVisibleIndex : 0).scrollIntoView();
}