惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
A
About on SuperTechFans
博客园 - Franky
Engineering at Meta
Engineering at Meta
Recent Announcements
Recent Announcements
云风的 BLOG
云风的 BLOG
B
Blog
Microsoft Security Blog
Microsoft Security Blog
L
LangChain Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
Martin Fowler
Martin Fowler
Y
Y Combinator Blog
Stack Overflow Blog
Stack Overflow Blog
博客园 - 叶小钗
Vercel News
Vercel News
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
Last Week in AI
Last Week in AI
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
爱范儿
爱范儿
V
V2EX
G
Google Developers Blog

蚊子的前端博客

微说 | 有的人觉得只要不考XX,一定能考好!-蚊子的前端博客 微说 | 春天来了-蚊子的前端博客 明天和意外不知道哪个先来-蚊子的前端博客 微说 | 既然错过了路口,就及时止损,重新规划路线上路-蚊子的前端博客 微说 | 2025年的出生人口数是792万-蚊子的前端博客 微说 | 工作年终总结,让写对接的接口的数量?-蚊子的前端博客 微说 | 温家宝:没有政治体制改革的成功 经济体制改革不可能进行到底-蚊子的前端博客 微说 | 违法犯罪了该不该被禁言?-蚊子的前端博客 微说 | 不明白为什么在推荐去俄罗斯旅游-蚊子的前端博客 微说 | 易中天论骗子-蚊子的前端博客 微说 | 一场大风吹散了秋天-蚊子的前端博客 微说 | 既要、又要、还要、更要!-蚊子的前端博客 又是一年的国庆雨季-蚊子的前端博客 微说 | 预估下2025年的出生人口数据-蚊子的前端博客 微说 | 可惜了我那些小时候的书本-蚊子的前端博客 微说 | 牛马有的是,驴不够了!-蚊子的前端博客 微说 | 能否有一条非户口也能高考的路-蚊子的前端博客 微说 | 小聊中医-蚊子的前端博客 微说 | 将要制作的一款新产品-蚊子的前端博客 微说 | 做人要有信-蚊子的前端博客 微说 | 好一个正义联盟-蚊子的前端博客 微说 | 都是见过吃过的主儿-蚊子的前端博客 微说 | 追求8小时工作制有错吗?-蚊子的前端博客 微说 | 如果尖锐的批评完全消失-蚊子的前端博客 微说 | 很好!-蚊子的前端博客 微说 | 封禁用户可以,但要告知具体原因-蚊子的前端博客 微说 | 面朝大海,春暖花开-蚊子的前端博客 微说 | 程序员的悲哀是什么?-蚊子的前端博客 微说 | 2025年出生人口的预测-蚊子的前端博客 前端在 LiveKit 中如何获取所有的参与者-蚊子的前端博客
CKEditor5 光标在粘贴的图片下一行-蚊子的前端博客
author · 2025-07-31 · via 蚊子的前端博客

CKEdtor5 在粘贴图片后,默认会选中图片,若用户想继续输入时,还得再手动按下方向键中的右键,将光标移动到下一行。

但在 IM 的聊天中,其实我们更希望是在粘贴后,光标能自动在图片的下一行。让用户继续进行输入。

那么如何修改编辑器的默认行为呢?

其实是不难,我们这里扩展一个 CKEditor5 的插件,在图片粘贴后,将光标移动到图片的下一行。

import Plugin from "@ckeditor/ckeditor5-core/src/plugin";

class ObjectURLUploadAdapterPlugin extends Plugin {
  init() {
    this.editor.plugins.get("ImageUploadEditing").on("uploadComplete", (_, { imageElement }) => {
      this.editor.model.change((writer) => {
        // 创建新段落
        const softBreak = writer.createElement("softBreak");

        // 将段落插入到图片之后
        writer.insert(softBreak, imageElement, "after");

        // 将光标定位到新段落
        writer.setSelection(softBreak, 0);
      });
    });
  }
}

export default ObjectURLUploadAdapterPlugin;

获取图片上传插件后,然后监听图片加载成功后,在该位置的下面插入一个换行符 softBreak 。

然后再把这个插件插入到 CKEditor 中。

import { CKEditor } from "@ckeditor/ckeditor5-react";
import { ClassicEditor } from "@ckeditor/ckeditor5-editor-classic";

const App = () => {
  return <CKEditor editor={ClassicEditor} extraPlugins={[ObjectURLUploadAdapterPlugin]} />;
};

大功告成!!!