当 SpreadJS 工作簿包含大量工作表时(如 30+),开发者通过 API 切换远端 Sheet 后,底部 SheetTab 标签栏常无法自动滚动到对应位置:
如:
- workbook.setActiveSheetIndex(15); // 切换到第16个Sheet
复制代码 尽管内容区已正确切换,但 SheetTab 仍停留在初始位置,仍需手动滚动查找当前 Sheet 标签。
我们可以用 startSheetIndex() 方法来解决这个问题:
- // 获取 workbook 实例
- const workbook = new GC.Spread.Sheets.Workbook(document.getElementById('ss'));
- // 切换到目标Sheet并同步SheetTab
- workbook.setActiveSheetIndex(15); // 激活目标Sheet
- workbook.startSheetIndex(10); // 设置SheetTab起始显示位置
复制代码
或者也可以自行设计一个智能定位的算法来实现,如:
- /**
- * 智能切换Sheet并自动对齐SheetTab
- * @param {GC.Spread.Sheets.Workbook} workbook
- * @param {number} targetIndex 目标Sheet索引(0-based)
- * @param {number} [visibleTabs=8] 可见标签数量(根据UI宽度估算)
- */
- function smartSwitchSheet(workbook, targetIndex, visibleTabs = 8) {
- // 1. 激活目标Sheet
- workbook.setActiveSheetIndex(targetIndex);
- // 2. 计算最优起始位置(使目标Sheet尽量居中显示)
- const maxStartPos = Math.max(0, workbook.getSheetCount() - visibleTabs);
- const idealStartPos = Math.max(0, targetIndex - Math.floor(visibleTabs/2));
- const startPos = Math.min(idealStartPos, maxStartPos);
- // 3. 设置SheetTab起始位置
- workbook.startSheetIndex(startPos);
- }
复制代码
不过我们也可以固定导航偏移量:
- // 始终让当前Sheet的前2个标签可见
- workbook.setActiveSheetIndex(15);
- workbook.startSheetIndex(13); // 显示13-21号标签(假设可见9个)
复制代码
通过使用 startSheetIndex 接口就可以避免出现内容区变了但是SheetTab没变的情况。
|
|