当前位置: 首页 > news >正文

vue富文本使用editor

富文本【图片上传、缩放、拖动和不能复制只能根据点击图片上传到服务器】

<div id="editorId"><quill-editorref="myQuillEditor"v-model.trim="addForm.content":options="editorOption":disabled="isDisable"@change="onEditorChange($event)"></quill-editor><inputtype="file"accept=".png,.jpg,.jpeg"@change="changeUpload"id="upload"style="display: none;"><span class="wordNumber">{{ wordNumber}}/2000</span></div>//给这个富文本加样式#editorId {width: 100%;max-height: 300px;overflow-y: scroll;
}

先下载插件并且引入

import { quillEditor} from "vue-quill-editor";
import { container, ImageExtend } from "quill-image-extend-module"
import ImageResize from 'quill-image-resize-module'
import { ImageDrop } from 'quill-image-drop-module';
import "quill/dist/quill.core.css";
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";
import Quill from "quill"  //注意一定要引入这个才能使用图片缩放
Quill.register("modules/ImageExtend", ImageExtend)
Quill.register("modules/ImageResize", ImageResize)
Quill.register('modules/imageDrop', ImageDrop);
export default {components: {quillEditor,},data() {return {editorOption: {placeholder: "编辑文章内容",theme: 'snow',modules: {clipboard: {// 粘贴板,处理粘贴图片  *** 主要是这里matchers: [[Node.ELEMENT_NODE, this.desMatcher]],},imageDrop: true,imageResize: {   //添加displayStyles: {backgroundColor: 'black',border: 'none',color: 'white'},modules: ['Resize', 'DisplaySize', 'Toolbar']},ImageExtend: {loading: true,name: "pictureFile",},toolbar: {// container: container,container: [['bold', 'italic', 'underline', 'strike'], // 加粗 斜体 下划线 删除线['blockquote', 'code-block'], // 引用  代码块[{ header: 1 }, { header: 2 }], // 1、2 级标题[{ list: 'ordered' }, { list: 'bullet' }], // 有序、无序列表[{ script: 'sub' }, { script: 'super' }], // 上标/下标[{ indent: '-1' }, { indent: '+1' }], // 缩进// [{ direction: 'rtl' }], // 文本方向[{ size: ['12', '14', '16', '18', '20', '22', '24', '28', '32', '36'] }], // 字体大小[{ header: [1, 2, 3, 4, 5, 6] }], // 标题[{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色// [{ font: ['songti'] }], // 字体种类[{ align: [] }], // 对齐方式['clean'], // 清除文本格式['image'] // 链接、图片,需要视频的可以加上video],// 拦截handlers: {image: function (value) {if (value) {document.querySelector('#upload').click()}}}}}},isDisable: false,wordNumber: ''};},methods: {changeUpload(e) {let file = e.target.files[0]const formData = new FormData()formData.append('file', file)this.$axios({method: "post",url: "/sys/fileOps/uploadFile",data: formData,headers: {'Content-Type': 'multipart/form-data'}}).then((res) => {let quill = this.$refs.myQuillEditor.quillif (res.data.code === 200) {//光标位置let length = quill.getSelection().index// 插入图quill.insertEmbed(length, "image", res.data.data)//  调整光标quill.setSelection(length + 1)} else {this.$message.error(res.data.message);}}).catch((err) => {console.log(err, '===');this.$message.error('系统错误');});},//内容改变事件onEditorChange(e) {e.quill.deleteText(800, 4);if (e.html == '') {this.wordNumber = 0} else {this.wordNumber = e.quill.getLength() - 1}},// 复制图片判断desMatcher(node, Delta) {console.log(Delta, '===')let ops = []Delta.ops.forEach(op => {if (op.insert && typeof op.insert === 'string') {// 如果粘贴了图片,这里会是一个对象,所以可以这样处理ops.push({insert: op.insert,})} else {if (op.insert.image.includes('file://') || op.insert.image.includes('data:image')) {  //本地图片会使文件file开头this.$message.warning('不允许粘贴图片,请手动上传')} else {ops.push({insert: op.insert,})}}})Delta.ops = opsreturn Delta}},created() { },mounted() { },
};

注意图片缩放和拖动要在build 文件夹中webpack.base.conf.js文件里面添加

module.exports = {plugins: [new webpack.ProvidePlugin({// 在这儿添加下面两行'window.Quill': 'quill/dist/quill.js','Quill': 'quill/dist/quill.js'})]
};

或者没有webpack就在vue.config.js中加入configureWebpack中配置

var webpack = require('webpack');
module.exports = {// 要引入webpackconfigureWebpack: {plugins: [new webpack.ProvidePlugin({'window.Quill': 'quill/dist/quill.js',//注意路径,可能与你们路径不一致'Quill': 'quill/dist/quill.js' //注意路径,可能与你们路径不一致}),]}
}
http://www.lryc.cn/news/468522.html

相关文章:

  • Spring Boot植物健康系统:绿色科技的创新引擎
  • 什么是域名?什么是泛域名?
  • c#webapi远程调试方法asp.netcore
  • XMLHttpRequest和FormData下载文件,ajax下载文件
  • 针对考研的C语言学习(2014二叉树大题代码实战)
  • webpack面试笔记(一)
  • 雷池社区版有多个防护站点监听在同一个端口上,匹配顺序是怎么样的
  • 【小白学机器学习15】 概率论的世界观
  • 合成数据用于大模型训练的3点理解
  • Safari 中 filter: blur() 高斯模糊引发的性能问题及解决方案
  • 浏览器实时更新esp32-c3 Supermini http server 数据
  • 【亚马逊云】基于 Amazon EKS 搭建开源向量数据库 Milvus
  • pytorch安装GPU版本,指定设备
  • 草地杂草数据集野外草地数据集田间野草数据集YOLO格式VOC格式目标检测计算机视觉数据集
  • 顺序表排序相关算法题|负数移到正数前面|奇数移到偶数前面|小于x的数移到大于x的数前面|快排思想(C)
  • 【小白学机器学习20】单变量分析 / 0因子分析 (只分析1个变量本身的数据)
  • [软件工程]—桥接(Brige)模式与伪码推导
  • TensorFlow面试整理-TensorFlow 结构与组件
  • linux下gpio模拟spi三线时序
  • makesense导出的压缩包是空的
  • Spring Boot框架下的中小企业设备维护系统
  • 处理文件上传和进度条的显示(进度条随文件上传进度值变化)
  • 【套题】大沥2019年真题——第5题
  • 上传Gitee仓库流程图
  • 二叉树相关OJ题 — 第一弹
  • 【学习笔记】RFID
  • 自动化部署-01-jenkins安装
  • AI工具大爆发,建议每个都使用收藏
  • Mybatis之参数处理
  • windows内核探索--打印windows的GDT表(全局描述符表)