批量设置内容不允许滚动
问题描述
业务系统需要批量设置多个书签或可编辑区域的内容,但不希望文档在每次设置时发生滚动,导致文档频繁跳动影响用户体验。
原因分析
SDK api 遵循第一人称视角来定义,设值接口(bookmark.setText、permMark.setText、bookmark.setHtml 等)调用时会自动滚动到指定区域并获取焦点。
当批量调用这些接口时,每次调用都会触发自动滚动,造成文档频繁跳动。
解决办法
通过 Application.setUIState api,设置禁止聚焦且禁止滚动。
// 设置调用 api 时,禁止聚焦文档,禁止滚动
const Application = await ZOfficeSDK.mount(url, selector, true);
await Application.ready();
await Application.setUIState({ cursorContext: { focus: false, scroll: false }});
// 然后执行批量设置
const count = await Application.ActiveDocument.Bookmarks.count;
for (let i = 1; i <= count; i++) {
const bookmark = await Application.ActiveDocument.Bookmarks.item(i);
await bookmark.setText(`批量设置内容 ${i}`);
}
相关说明
focus: false:禁止 API 调用时自动聚焦到文档scroll: false:禁止 API 调用时自动滚动到目标区域
设置后,所有的设值 API 都不会再触发自动聚焦和滚动,直到重新设置 setUIState。