有功夫的兄弟可以看一下我的博客 www.maple.ink

粘贴图片到富文本

直接拖拽图片到富文本,或者从系统中复制图片文件,在富文本中粘贴,都无法将图片放入富文本。前者会直接在浏览器中打开新窗口,后者直接无任何反应。

通过安装 quill-image-extend-module 增强模块使富文本编辑器具备对图片拖拽放入富文本框的能力,但不具备复制粘贴进入富文本的功能。这里可以配合 quill-image-resize-module 模块设置图片的大小。

// 引入图片增强模块
import {container, ImageExtend, QuillWatch} from 'quill-image-extend-module'
Quill.register('modules/ImageExtend', ImageExtend)
// 引入图片控制增强模块
import ImageResize from 'quill-image-resize-module'
Quill.register('modules/ImageResize', ImageResize)export default {data() {return {editorOptions: {modules: {ImageExtend: {loading: true,name: 'img',action: '',headers: (xhr) => {},response: (res) => {return res.info}},ImageResize: {modules: [ 'Resize', 'DisplaySize', 'Toolbar' ]},}}}}
}

注意:此类方法虽然具备将图片显示在富文本框中的功能,但是其原理实际上是获得了图片的file对象,通过FileReader对象将其转化为 base64 格式,放入img的src属性中,所以从理论上来说不具备传输大文件的能力,可能也会存在一定程度上的失真。

粘贴文件到富文本

粘贴文件主要原理就是绑定当前富文本框的粘贴事件,通过粘贴事件获得粘贴进去的 file 对象。

// 引入自定义的格式
import uploadFile from './quillPlus/uploadFile';
uploadFile.blotName = 'uploadFile';
uploadFile.tagName = 'div';
Quill.register(uploadFile);methods: {onEditorFocus() {let quill = this.$refs.editor.quill,self_ = this;// 监听粘贴事件quill.root.addEventListener('paste', (event)=> {// 判断粘贴的是否是图片if(event.clipboardData && event.clipboardData.files && event.clipboardData.files) {// 阻止原生事件event.preventDefault();let cursorIndex = quill.selection.savedRange.index;[].forEach.call(event.clipboardData.files, file => {// 判断当前文件是否为图片if(file.type.match(/^image\/(gif|jpe?g|a?png|bmp)/i)) {let reader = new FileReader();reader.readAsDataURL(file);reader.onload = function(e) {quill.insertEmbed(cursorIndex, 'image', e.target.result);}}else {// 注意这里由于 insertEmbed 语句仅能插入富文本中定义好的格式,所以要扩展当前格式quill.insertEmbed(cursorIndex, 'uploadFile', {file: file, fileIndex: self_.fileIndex++});}})}});},}

自定义格式组件

import {Quill} from 'vue-quill-editor';const BlockEmbed = Quill.import('blots/block/embed');
class uploadFile extends BlockEmbed {static create(value) {let node = super.create();// 设置一个class类名控制样式node.setAttribute('class', 'upload-file');// 设置不允许操作node.setAttribute('contentEditable', false);// 设置data-id标示node.setAttribute('data-id', value.fileIndex);node.innerText = value.file.name;return node;}static value(node) {return {dataId: node.getAttribute('data-id')}}
}export default uploadFile;

这种解决方案也可以解决上传图片的问题,尤其是大图片。

注意:上传文件这里存在两个解决方案:

  • 粘贴文件进入富文本则触发上传,通过 HTTP 请求直接调用接口将 file 对象转为 fromData 传递到服务器。服务器接收到文件后返回当前文件在服务器的链接,将链接插入到页面DOM中的属性上。
  • 粘贴文件进入富文本则将当前file对象存入数组中,点击上传按钮的时候通过循环上传服务器。

推荐上传文件使用第一种解决方案,原因是:前端省事儿~

增强粘贴quill-editor相关推荐

  1. 现代化富文本编辑器 Quill Editor

    介绍 近期在弄富文本编辑器相关的内容,其中项目中使用了 Quill Editor(后面简称 Quill).Quill 自称是一个现代化强大的富文本编辑器,它与其它富文本编辑器(例如 UEditor)不 ...

  2. Quill Editor

    VUE-QUILL-EDITOR 该文章仅记录学习过程,不展示最终文件源码 安装 quill-editor 在对应的目录打开 Terminal 执行以下命令: 安装 editor npm instal ...

  3. quill editor:The given range isn‘t in document

    公司网站使用的是 .NET Razor + 渐进式 Vue 的方式编写的. 在一个发帖子的页面 quill 的区域包含在了 Vue 组件中. 在 vue 的 created 函数中获取不到 quill ...

  4. quill富文本编辑器quill粘贴图片上传服务器

    强大的富文本编辑器:quill github:32k start++,:https://github.com/quilljs/quill quill粘贴图片上传服务器 <link href=&q ...

  5. 现代富文本编辑器Quill的模块化机制

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师. 官方网站:devui.design Ng组件库:ng-devui(欢 ...

  6. 【华为云技术分享】现代富文本编辑器Quill的模块化机制

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师. 官方网站:devui.design Ng组件库:ng-devui(欢 ...

  7. vue中使用quill富文本编辑器

    因为公司的需求,对比了线在很火的几款富文本编辑器,最终选定了quill,他够轻量,拓展性也比较高,除了文档是英文的阅读不方便之外,都很适合公司项目.故整理出来,也方便以后使用. 在网上找了一个中文文档 ...

  8. quill富文本使用

    quill  表格功能 要 2.0 npm install quill@2.0.0-dev.3 -dev–save 复制粘贴word 里面图片并且 1.0 与 2.0 其set  与获取富文本单词不一 ...

  9. 富文本编辑器Quill(二)上传图片与视频

    image与video在Quill formats中属于Embeds,要在富文本中插入图片或者视频需要使用insertEmbed api. insertEmbed insertEmbed(index: ...

最新文章

  1. 问题集锦(30-35)
  2. 计算机无法安装系统,为什么计算机无法重新安装系统?
  3. TCP 滑动窗口协议
  4. Arduino--蓝牙
  5. 2018年7月5日笔记
  6. EF4.1中诡异的GUID为空问题
  7. [原]TCP/UDP使用细节备忘
  8. [Buzz.Today]2011.06.26
  9. RC4加密解密java算法
  10. PHP表单提交后页面跳转,PHP在表单提交后重定向到另一个页面
  11. 通配符?子字符串匹配主字符串次数_leetcode 44 通配符匹配(c++)
  12. 华为机试HJ73:计算日期到天数转换
  13. 配置php apache,apache如何配置php
  14. 十五款固态硬盘收获季节展示
  15. vmware虚拟机安装win7_VMware虚拟机安装教程
  16. 风清清,雨霖霖,青剑低啸吟,月色如银
  17. android 打开otg代码,android检查是否插入OTG鼠标或键盘代码
  18. MySQL数据库(四):多表查询、视图、事务、索引、函数、Go连接MySQL
  19. CSS 基础教程:CSS 语法
  20. Proteus仿真时出现Cannot open‘***\LISA5476.SDF’的错误!

热门文章

  1. 复述、听说读写与学习
  2. Ionic页面的生命周期
  3. umi 中如何修改浏览器上的icon和title
  4. 2017年2月24日
  5. C 语言:#warning 指令
  6. 代码审计--Fortify 如何定位中间文件
  7. python2爬去多玩图库
  8. 一波接一波,吃瓜群众几度崩溃,微博为何总宕机?
  9. 在vue中使用和风天气api
  10. 标准正态分布函数的近似计算