当前位置: 首页 > 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' //注意路径,可能与你们路径不一致}),]}
}

相关文章:

vue富文本使用editor

富文本【图片上传、缩放、拖动和不能复制只能根据点击图片上传到服务器】 <div id"editorId"><quill-editorref"myQuillEditor"v-model.trim"addForm.content":options"editorOption":disabled"isDisable"change&…...

Spring Boot植物健康系统:绿色科技的创新引擎

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了植物健康系统的开发全过程。通过分析植物健康系统管理的不足&#xff0c;创建了一个计算机管理植物健康系统的方案。文章介绍了植物健康系统的系统分析部分&…...

什么是域名?什么是泛域名?

域名 定义 域名是互联网上用于识别和定位网站或网络服务的名称。它是由一串用点分隔的字符组成&#xff0c;例如 “baidu.com”。就像是现实生活中建筑物的地址&#xff0c;方便用户在互联网的海量信息中找到特定的网站。 结构 域名从右到左依次为顶级域名&#xff08;TLD&…...

c#webapi远程调试方法asp.netcore

服务器安装 Visual Studio 2019 Remote Debugger 打开并运行 tools->Options 选择No Authorizaiton 确保IIS已经启动 打开本地项目->调试->添加到进程 参考&#xff1a; c#webapi远程调试方法asp.netcore - txwtech - 博客园...

XMLHttpRequest和FormData下载文件,ajax下载文件

1、前端请求只做下载功能 function downloadDatas3() {// 封装请求参数let formData new FormData();formData.append(page, 1);formData.append(rows, 10);// 创建xhr对象let xhr new XMLHttpRequest();xhr.open(POST, http://127.0.0.1:8080/getData);// xhr.setRequestHe…...

针对考研的C语言学习(2014二叉树大题代码实战)

题目描述 解析 1.递归思想遍历节点&#xff0c;若是叶子结点就累加计算的wpl&#xff0c;反之继续遍历 2.代码如下 //树 typedef struct trees {ElemType data;struct trees* lc;struct trees* rc; }treeNode, * Tree;3.算法设计 //deep路径长度也叫做深度&#xff0c;0开始 …...

webpack面试笔记(一)

一.webpack基础 1.模块化 什么是模块化? 模块化是把一个复杂的系统分解到多个模块以方便编码 为什么出现模块化 以前使用命名空间的方式来组织代码,比如jQuery,zepto, 它们有很多缺点: 命名空间冲突,两个库可能会使用同一个名称,例如zepto也被放在window.$下无法合理管理项目…...

雷池社区版有多个防护站点监听在同一个端口上,匹配顺序是怎么样的

如果域名处填写的分别为 IP 与域名&#xff0c;那么当使用进行 IP 请求时&#xff0c;则将会命中第一个配置的站点 以上图为例&#xff0c;如果用户使用 IP 访问&#xff0c;命中 example.com。 如果域名处填写的分别为域名与泛域名&#xff0c;除非准确命中域名&#xff0c;否…...

【小白学机器学习15】 概率论的世界观

目录 1 最近看的几本书和想说的 1.1 最近看的书 1.2 为什么写这个 2 概率论的观点看世界 2.1 上帝掷骰子&#xff0c;没有绝对的事情&#xff0c;所有事情都是概率决定的&#xff0c;都是相对的。 2.2 万物皆可能&#xff0c;无物是必然 2.3 什么是&#xff1a;可能性…...

合成数据用于大模型训练的3点理解

最近看国内对合成数据的研究讨论也变得多 ,而不单单是多模态,扩散模型这些偏视觉类的, 因此就合成数据写一下目前的情况。 2023年国外就有很多研究合成数据的论文, 包括Self-Consuming Generative Models Go MAD, Crowd Workers Widely Use Large Language Models for Text Pr…...

Safari 中 filter: blur() 高斯模糊引发的性能问题及解决方案

目录 引言问题背景&#xff1a;filter: blur() 引发的问题产生问题的原因分析解决方案&#xff1a;开启硬件加速实际应用示例性能优化建议常见的调试工具与分析方法 引言 在前端开发中&#xff0c;CSS滤镜&#xff08;如filter: blur()&#xff09;的广泛使用为页面带来了各种…...

浏览器实时更新esp32-c3 Supermini http server 数据

一利用此程序的思路就可以用浏览器显示esp32 采集的各种传感器的数据&#xff0c;也可以去控制各种传感器。省去编写针对各系统的app. 图片 1.浏览器每隔1秒更新一次数据 2.现在更新的是开机数据&#xff0c;运用此程序&#xff0c;可以实时显示各种传感器的实时数据 3.es…...

【亚马逊云】基于 Amazon EKS 搭建开源向量数据库 Milvus

文章目录 一、先决条件1.1 安装AWS CLI ✅1.2 安装 EKS 相关工具✅1.3 创建 Amazon S3 存储桶✅1.4 创建 Amazon MSK 实例✅ 二、创建EKS集群三、创建 ebs-sc StorageClass四、安装 AWS Load Balancer Controller五、部署 Milvus 数据库5.1 添加 Milvus Helm 仓库5.2 配置 S3 作…...

pytorch安装GPU版本,指定设备

安装了GPU版本的pytorch的时候&#xff0c;想要使用CPU&#xff0c;怎么操作呢&#xff1f; 设置环境变量&#xff1a; set TF_FORCE_GPU_ALLOW_GROWTHfalse set CUDA_VISIBLE_DEVICES如果想要使用固定序号的GUP设备&#xff0c;则指定ID set CUDA_VISIBLE_DEVICES0 # 使用第…...

草地杂草数据集野外草地数据集田间野草数据集YOLO格式VOC格式目标检测计算机视觉数据集

一、数据集概述 数据集名称&#xff1a;杂草图像数据集 数据集是一个包含野草种类的集合&#xff0c;其中每种野草都有详细的特征描述和标记。这些数据可以包括野草的图片、生长习性、叶片形状、颜色等特征。 1.1可能应用的领域 农业领域: 农业专家和农民可以利用这一数据集来…...

顺序表排序相关算法题|负数移到正数前面|奇数移到偶数前面|小于x的数移到大于x的数前面|快排思想(C)

负数移到正数前面 已知顺序表 ( a 1 , … , a n ) (a_{1},\dots,a_{n}) (a1​,…,an​)&#xff0c;每个元素都是整数&#xff0c;把所有值为负数的元素移到全部正数值元素前边 算法思想 快排的前后指针版本 排序|冒泡排序|快速排序|霍尔版本|挖坑版本|前后指针版本|非递归版…...

【小白学机器学习20】单变量分析 / 0因子分析 (只分析1个变量本身的数据)

目录 1 什么是单变量分析&#xff08;就是只分析数据本身&#xff09; 1.1 不同的名字 1.2 《戏说统计》这本书里很多概念和一般的书不一样 1.3 具体来说&#xff0c;各种概率分布都属于单变量分析 2 一维的数据分析的几个层次 2.1 数据分析的层次 2.2 一维的数据为什么…...

[软件工程]—桥接(Brige)模式与伪码推导

桥接&#xff08;Brige&#xff09;模式与伪码推导 1.基本概念 1.1 动机 由于某些类型的固有的实现逻辑&#xff0c;使它们具有两个变化的维度&#xff0c;乃至多个维度的变化。如何应对这种“多维度的变化”&#xff1f;如何利用面向对象技术是的类型可以轻松的沿着两个乃至…...

TensorFlow面试整理-TensorFlow 结构与组件

TensorFlow 的结构和组件是其功能强大、灵活性高的重要原因。掌握这些结构和组件有助于更好地理解和使用 TensorFlow 构建、训练和部署模型。以下是 TensorFlow 关键的结构与组件介绍: 1. Tensor(张量) 定义:张量是 TensorFlow 中的数据载体,类似于多维数组或矩阵。张量的…...

linux下gpio模拟spi三线时序

目录 前言一、配置内容二、驱动代码实现三、总结 前言 本笔记总结linux下使用gpio模拟spi时序的方法&#xff0c;基于arm64架构的一个SOC&#xff0c;linux内核版本为linux5.10.xxx&#xff0c;以驱动三线spi(时钟线sclk&#xff0c;片选cs&#xff0c;sdata数据读和写使用同一…...

从仿真到论文图表:手把手教你用FDTD参数扫描和Matlab处理WO3薄膜光学数据

从仿真到论文图表&#xff1a;FDTD参数扫描与Matlab数据可视化全流程解析 在光电材料研究中&#xff0c;WO₃薄膜因其优异的电致变色特性备受关注。当我们需要系统研究薄膜厚度对光学性能的影响时&#xff0c;FDTD Solutions的参数扫描功能配合Matlab的数据处理能力&#xff0c…...

STM32+RS485实战:用Modbus RTU协议读取液压传感器数据(附自动收发电路避坑)

STM32与RS485实战&#xff1a;从电路设计到Modbus RTU协议解析 液压传感器数据采集在工业自动化领域有着广泛应用&#xff0c;而RS485总线因其抗干扰能力强、传输距离远等优势成为首选通信方式。本文将深入探讨如何基于STM32微控制器搭建RS485硬件电路&#xff0c;并通过Modbus…...

终极指南:如何5分钟搞定B站字幕提取与格式转换

终极指南&#xff1a;如何5分钟搞定B站字幕提取与格式转换 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 你是否曾为保存B站视频中的精彩内容而烦恼&#xff1f;…...

告别“盲调”:用OllyDbg 2.x手把手破解TraceMe,从GetDlgItemTextA断点到NOP修改实战

逆向工程实战&#xff1a;用OllyDbg 2.x破解TraceMe的关键技术与思维训练 逆向工程就像一场精心设计的数字解谜游戏&#xff0c;而OllyDbg则是我们手中的万能钥匙。本文将带你深入TraceMe这个经典逆向练习的内部世界&#xff0c;从API断点设置到关键跳转修改&#xff0c;完整呈…...

别再死记公式了!用Python+NetworkX可视化理解关系闭包(附完整代码)

用PythonNetworkX玩转关系闭包&#xff1a;从数学抽象到动态可视化的实战指南 第一次接触"关系闭包"这个概念时&#xff0c;我盯着课本上那些晦涩的数学符号和矩阵运算整整半小时&#xff0c;依然云里雾里。直到我用Python的NetworkX库将社交网络中的关注关系画成图形…...

ESP32-CAM上传图片总失败?排查HTTP POST到巴法云的5个常见坑(WiFi、电源、引脚)

ESP32-CAM图片上传失败排查指南&#xff1a;从硬件到平台的5大关键点 当你满怀期待地将ESP32-CAM对准拍摄对象&#xff0c;却发现图片始终无法上传到巴法云时&#xff0c;那种挫败感我深有体会。这不是一个简单的"复制粘贴代码就能运行"的项目&#xff0c;而是一个需…...

SwiftHTTP文件上传完全指南:从基础到企业级应用

SwiftHTTP文件上传完全指南&#xff1a;从基础到企业级应用 【免费下载链接】SwiftHTTP Thin wrapper around NSURLSession in swift. Simplifies HTTP requests. 项目地址: https://gitcode.com/gh_mirrors/sw/SwiftHTTP 在iOS和macOS开发中&#xff0c;SwiftHTTP文件上…...

别再傻等AS下载Gradle了!手把手教你手动配置Gradle 5.4.1(附国内镜像源)

高效解决Android Studio Gradle下载难题&#xff1a;手动配置全攻略 每次打开Android Studio准备大展身手时&#xff0c;却被"Could not install Gradle distribution"的报错拦住去路&#xff1f;作为经历过无数次这种折磨的开发者&#xff0c;我完全理解那种看着进度…...

探索War3编辑器(7):从触发器GUI到JASS脚本的进阶实践

1. 为什么需要从GUI转向JASS脚本 很多War3地图作者刚开始都会使用图形化触发器界面&#xff08;GUI&#xff09;来制作游戏逻辑&#xff0c;毕竟点点鼠标就能完成功能确实很方便。但当你想要实现更复杂的效果时&#xff0c;比如循环判断系统、动态技能机制或者高级AI行为&#…...

中国县城 AI 小店遍地开花:是风口还是陷阱?加盟背后藏“割韭菜”套路

01. AI 赋能县城谁能想到&#xff0c;中国十八线县城的 AI 产业密度直逼硅谷。在县城老街上&#xff0c;能偶遇 AI 面馆、AI 自习室和 AI 送水站&#xff0c;招牌与外墙的违和感十足&#xff0c;山姆奥特曼看了或许会挠头。“任何行业都值得用 AI 重做一遍”&#xff0c;县城小…...