handsontable滚动条滚动时表格样式会被重置
时间: 2023-07-20 09:31:31 浏览: 136
这可能是由于 Handsontable 的虚拟滚动机制导致的。当您滚动表格时,Handsontable 会重新渲染可见部分的单元格,但对于不可见的单元格,它们将从 DOM 中移除以提高性能。
因此,您可能需要在单元格渲染时保存其状态并在需要时重新应用。您可以使用 Handsontable 的 `afterRender` 钩子来实现此目的。
具体来说,您可以在 `afterRender` 中保存可见单元格的状态,例如样式、值等等。然后,在滚动时,您可以使用 `beforeRender` 钩子来重新应用这些状态,以防止样式被重置。
以下是一个示例代码片段,可能有助于您解决此问题:
```javascript
var hot = new Handsontable(container, {
// ...其他配置...
afterRender: function(isForced) {
if (isForced) {
// 获取可见的行和列
var visibleRows = this.view.wt.wtTable.visibilityEdgeRow;
var visibleCols = this.view.wt.wtTable.visibilityEdgeColumn;
// 保存可见单元格的状态
for (var row = visibleRows.start; row <= visibleRows.end; row++) {
for (var col = visibleCols.start; col <= visibleCols.end; col++) {
var cellMeta = this.getCellMeta(row, col);
var cellValue = this.getDataAtCell(row, col);
var cellStyle = this.getCellStyle(row, col);
// 将状态保存到一个对象中
var cellState = {
value: cellValue,
style: cellStyle
};
// 将状态存储在元数据中
cellMeta.myState = cellState;
}
}
}
},
beforeRender: function(force) {
if (force) {
// 获取可见的行和列
var visibleRows = this.view.wt.wtTable.visibilityEdgeRow;
var visibleCols = this.view.wt.wtTable.visibilityEdgeColumn;
// 重新应用可见单元格的状态
for (var row = visibleRows.start; row <= visibleRows.end; row++) {
for (var col = visibleCols.start; col <= visibleCols.end; col++) {
var cellMeta = this.getCellMeta(row, col);
if (cellMeta.myState) {
// 如果状态存在,则重新应用
this.setDataAtCell(row, col, cellMeta.myState.value);
this.setCellMeta(row, col, 'style', cellMeta.myState.style);
}
}
}
}
}
});
```
请注意,这只是一个示例,您可能需要根据您的实际需求进行调整。
阅读全文