You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 15中CKEditor 5动态添加内容后无法滚动到底部问题

Angular 15 中 CKEditor 5 动态添加内容后无法滚动到底部的解决方案

问题描述

在Angular 15项目中使用CKEditor 5时,动态插入文本并将光标设置到内容末尾后,编辑器无法自动滚动到光标位置或底部。尝试过以下代码但未生效:

this.noteEditor.editorInstance.setData(editorData.replace(regExMatch, res.Result.Text.trim()));
this.noteEditor.editorInstance.model.change((writer:any) => {
  writer.setSelection(writer.createPositionAt( this.noteEditor.editorInstance.model.document.getRoot(), 'end' ));
  // this.noteEditor.editorInstance.editing.view.scrollToTheSelection({viewportOffset:300,alignToTop:false})
  // console.log(`consult-notes.component::this.noteEditor.editorInstance - `,this.noteEditor.editorInstance);
  // document.getElementById("ck-scroll").scrollIntoView();
});

需求仅为:动态添加内容后滚动到CKEditor视图底部。

解决方案

问题核心在于setData是异步操作,直接在其后执行光标设置和滚动时,编辑器DOM尚未完成更新,导致滚动逻辑失效。需等待setData执行完成后再处理光标与滚动:

修正后的代码

// 等待setData异步操作完成后再处理光标和滚动
this.noteEditor.editorInstance.setData(editorData.replace(regExMatch, res.Result.Text.trim()))
  .then(() => {
    // 设置光标到内容末尾
    this.noteEditor.editorInstance.model.change((writer: any) => {
      const root = this.noteEditor.editorInstance.model.document.getRoot();
      writer.setSelection(writer.createPositionAt(root, 'end'));
    });
    // 调用CKEditor内置方法滚动到选中位置(即内容末尾)
    this.noteEditor.editorInstance.editing.view.scrollToTheSelection({
      alignToTop: false, // 强制滚动到底部而非顶部
      viewportOffset: 20 // 可选:设置与视口底部的偏移量
    });
  });

备选方案(直接操作DOM)

如果上述方法仍不生效,可直接操作编辑器的滚动容器DOM:

this.noteEditor.editorInstance.setData(editorData.replace(regExMatch, res.Result.Text.trim()))
  .then(() => {
    // 设置光标到末尾(同上)
    this.noteEditor.editorInstance.model.change((writer: any) => {
      const root = this.noteEditor.editorInstance.model.document.getRoot();
      writer.setSelection(writer.createPositionAt(root, 'end'));
    });
    // 获取编辑器滚动容器并滚动到底部
    const scrollContainer = this.noteEditor.editorInstance.ui.view.editableElement.parentElement;
    if (scrollContainer) {
      scrollContainer.scrollTop = scrollContainer.scrollHeight;
    }
  });

内容的提问来源于stack exchange,提问作者Anuroop S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:43:26