Medium Editor 富文本编辑器图片拖拽与文件上传实战指南:3步快速上手
【免费下载链接】medium-editorMedium.com WYSIWYG editor clone. Uses contenteditable API to implement a rich text solution.项目地址: https://gitcode.com/gh_mirrors/me/medium-editor
Medium Editor是一款基于 contenteditable API 的开源富文本编辑器,内置的图片拖拽与文件上传功能让编辑体验开箱即用:把图片文件直接拖进编辑区域,无需任何按钮,图片就会自动出现在光标位置。本指南带你理解其工作原理、开启/关闭方式以及如何扩展成完整的文件上传方案。
一、开箱即用:拖拽插图的默认行为 🖼️
Medium Editor 的拖拽插图由内置的fileDragging 扩展实现(旧版 image-dragging 扩展已废弃,代码见 deprecated/image-dragging.js)。默认imageDragging选项为开启状态,初始化编辑器后无需额外配置:
- 将图片文件拖入编辑区,编辑区会显示灰色高亮(
medium-editor-dragover类名) - 松开鼠标后,扩展通过FileReader将文件读取为 Base64 DataURL
- 自动在光标处插入
<img>标签,图片即刻显示
核心实现位于 file-dragging.js,它订阅了editableDrag与editableDrop两个自定义事件;拖拽高亮样式定义在 _file-dragging.scss 中。
二、开关控制:一键启用或关闭拖拽 🎛️
最快关闭方法:初始化时传入imageDragging: false即可:
var editor = new MediumEditor('.editable', { imageDragging: false });内部逻辑(core.js)会根据imageDragging开关与自定义扩展的组合,自动决定 fileDragging 扩展的行为:
| imageDragging | 自定义 imageDragging 扩展 | 实际行为 |
|---|---|---|
| 开启 | 无 | 启用 fileDragging,允许图片拖入 |
| 关闭 | 无 | 启用 fileDragging,但禁止所有类型插入 |
| 任意 | 有 | 完全交给自定义扩展处理 |
💡 注意:关闭图片拖入 ≠ 完全禁止拖放。编辑器仍会拦截原生拖放行为,只是不插入文件,这一点在 OPTIONS.md 的 Image Dragging Options 章节中有说明。
三、进阶实战:扩展成文件上传 📤
默认实现把图片以 Base64 形式内嵌进 HTML,适合轻量场景;生产环境通常希望把文件上传到服务器。由于 fileDragging 就是一个标准扩展,你可以直接覆写它——在extensions中传入自定义imageDragging,即可完全接管拖放流程:
var editor = new MediumEditor('.editor', { extensions: { imageDragging: {} // 传入自定义扩展实例,接管拖放逻辑 } });在自定义扩展中,你可以监听同一个editableDrop事件,拿到event.dataTransfer.files后改用FormData + XMLHttpRequest/Fetch上传到服务端,再把返回的 URL 写入<img src>。这样既保留了"拖入即插图"的交互,又获得了压缩、格式校验、CDN 存储等能力。
四、验证与测试 🧪
项目自带完整的拖放测试用例 drag-and-drop.spec.js,覆盖了高亮类的添加/移除、图片插入、以及关闭拖拽后的行为,可作为你扩展功能的测试参考。更多事件(如editableInput捕获拖入后的内容变化)可在 API.md 与 CUSTOM-EVENTS.md 中查阅;想动手体验,可打开 demo/index.html 直接拖一张图片试试。
小结 🏁
- 零配置:默认开启图片拖拽插入,FileReader 自动转 Base64 入库
- 可控:
imageDragging: false一键关闭,或通过自定义扩展完全接管 - 可扩展:覆写 fileDragging 即可对接真实文件上传服务
Medium Editor 的拖放能力让"所见即所得"从文本延伸到了图片,结合工具栏与扩展机制,足以支撑大多数 CMS、博客与表单场景的图片编辑需求。
【免费下载链接】medium-editorMedium.com WYSIWYG editor clone. Uses contenteditable API to implement a rich text solution.项目地址: https://gitcode.com/gh_mirrors/me/medium-editor
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考