ChickenDreamFactory / fe-question

fe-question,前端问答

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

常见富文本编辑器对比

webVueBlog opened this issue · comments

WangEditor:轻量级 web 富文本编辑器,配置方便,使用简单。支持 IE10+ 浏览器。vue版本。一个国人独立开发的基于javascript和css开发的web富文本编辑器,之前用过感觉还是很不错的,UI漂亮,中文文档齐全并且开源。不足的地方在于更新不及时,没有强大的团队支撑。不过细心的会发现现在开始有动作了,成立了wangeditor-team来进行维护,可能也是应了广大用户的需求。

UEditor:由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。不足在于官方很久没有更新了,现在已没有专门维护了,很多在线体验、下载地址都关闭了,而且样式比较老旧,不符合新时代的审美。插件使用复杂,前后端不分离。

Kindeditor:一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本输入框。文档齐全,为中文,阅读方便。缺点:图片上传存在问题,上传历史过多,会全部加载,导致浏览器卡顿。

TinyMCE:是一款易用、且功能强大的所见即所得的富文本编辑器。优势:插件丰富,自带插件基本涵盖日常所需功能;接口丰富,可扩展性强,有能力可以无限拓展功能;界面好看,符合现代审美;提供经典、内联、沉浸无干扰三种模式;多语言支持,官网可下载几十种语言。官方也在之前发布了 vue 版本的 tinymce-vue,帮你封装好了很多东西

Vue-Quill-Editor:基于 Quill、适用于 Vue 的富文本编辑器,支持服务端渲染和单页应用。据说大企业用的比较多,不限制框架,但是需要定制,理念很先进。

import VueUeidtorWrap from 'vue-ueditor-wrap'; ES6 Module
// or
const VueUeditorWrap = require('vue-ueditor-wrap'); CommonJS

https://juejin.cn/post/6844903856426450958

image

Vue-Quill-Editor:不支持本地视频上传

vue-froala-wysiwyg:我想要的功能都有包括图片和视频上传,还额外支持响应式,但是是收费的

ueditor:功能很全,但是样式实在是很丑,可能要自己封装

剩下的编辑器基本上要么是功能不足或者是移动端的(优点是轻量)

因为没做过富文本的开发,所以当时我测试这些富文本就花了一个下午,后来仔细考虑了一下,最后使用了比较保守的方式,用了ueditor开发,顺便美化了一下。

image

image

image

image

给图标绑定点击事件

插入图片,插入视频,插入文件这种操作,我并没有使用ueditor内置的功能,视频和文件夹我做成了进度条的形式,放在了富文本编辑器的下边,图片上传成功后返回值拼接起来,根据双向绑定,在editor组件内部动态创建图片,点击这三个图标,会把事件抛出来,这样你想用什么上传组件就用哪个,你还可以用socket进行上传等等,这样子,editor组件内部只需要维护编辑器的html文本就可以,职责单一,后期也好维护

    autoSaveBody () {
      if (this.isAutoSaved && this.editorData.body) {
        let storage = {}
        Object.assign(storage, this.editorData)
        const pms = JSON.stringify(storage)
        this.isAutoSaved = false
        setTimeout(() => {
          localStorage.setItem(this.storageKey, pms)
          this.isAutoSaved = true
        }, 500)
      }
    }

但是必须要考虑一个情况,当前是第一次写还是发布之后进行修改,所以外部使用的时候,你只需要操作innerValue这个属性,这个属性的值你可以通过后台来获取(后台获取的就是修改状态),然后编辑器就会呈现什么样的数据,内部的实现方式就是加了一个init函数

缺点

组件太大,默认压缩也有389k,开启gzip之后有100k左右

优点

功能强大,产品需求可迭代。