vue集成一个支持图片缩放拖拽的富文本编辑器


Posted in Vue.js onJanuary 29, 2021

需求:

根据业务要求,需要能够上传图片,且上传的图片能在移动端中占满屏幕宽度,故需要能等比缩放上传的图片,还需要能拖拽、缩放、改变图片大小。尝试多个第三方富文本编辑器,很难找到一个完美符合自己要求的编辑器。经过多次尝试,最终选择了wangEditor富文本编辑器。 最初使用的是vue2Editor富文本编辑器,vue2Editor本身是不支持图片拖拽的,但是提供了可配置图片拖拽的方法,需要借助Quill.js来实现图片拖拽。虽然满足了业务需求,但是在移动端展示的效果不是很理想。 此次编辑器主要是上传的富文本需要在移动端进行展示,为了达到理想效果,需要能修改图片百分比,当设置img标签的width属性为100% 时,就可以满足需求。最近发新版本(第四版 v4)的wangEditor可以满足需求,最终选择了它用于实际开发中。

效果图:

vue集成一个支持图片缩放拖拽的富文本编辑器

代码案例及相关配置如下:

安装插件

npm i wangeditor --save
// or
yarn add wangeditor

编辑器配置

<template>
	<div class="w_editor">
		<!-- 富文本编辑器 -->
		<div id="w_view"></div>
	</div>
</template>

<script>
// 引入富文本
import WE from "wangeditor";
// 引入elementUI Message模块(用于提示信息)
import { Message } from "element-ui";

export default {
	name: "WEditor",
	props: {
		// 默认值
		defaultText: { type: String, default: "" },
		// 富文本更新的值
		richText: { type: String, default: "" }
	},
	data() {
		return {
			// 编辑器实例
			editor: null,
			// 富文本菜单选项配置
			menuItem: [
				"head",
				"bold",
				"fontSize",
				"fontName",
				"italic",
				"underline",
				"indent",
				"lineHeight",
				"foreColor",
				"backColor",
				"link",
				"list",
				"justify",
				"image",
				"video"
			]
		};
	},
	watch: {
		// 监听默认值
		defaultText(nv, ov) {
			if (nv != "") {
				this.editor.txt.html(nv);
				this.$emit("update:rich-text", nv);
			}
		}
	},
	mounted() {
		this.initEditor();
	},
	methods: {
		// 初始化编辑器
		initEditor() {
			// 获取编辑器dom节点
			const editor = new WE("#w_view");
			// 配置编辑器
			editor.config.showLinkImg = false; /* 隐藏插入网络图片的功能 */
			editor.config.onchangeTimeout = 400; /* 配置触发 onchange 的时间频率,默认为 200ms */
			editor.config.uploadImgMaxLength = 1; /* 限制一次最多能传几张图片 */
			// editor.config.showFullScreen = false; /* 配置全屏功能按钮是否展示 */
			editor.config.menus = [...this.menuItem]; /* 自定义系统菜单 */
			// editor.config.uploadImgMaxSize = 5 * 1024 * 1024 /* 限制图片大小 */;
			editor.config.customAlert = err => {
				Message.error(err);
			};
			// 监控变化,同步更新数据
			editor.config.onchange = newHtml => {
				// 异步更新组件富文本值的变化
				this.$emit("update:rich-text", newHtml);
			};
			// 自定义上传图片
			editor.config.customUploadImg = (resultFiles, insertImgFn) => {
				/**
				 * resultFiles:图片上传文件流
				 * insertImgFn:插入图片到富文本
				 * 返回结果为生成的图片URL地址
				 * */
				// 此方法为自己封赚改写的阿里云图片OSS直传插件。
				this.$oss(resultFiles[0], resultFiles[0]["name"]).then(url => {
					!!url && insertImgFn(url); /* oss图片上传,将图片插入到编辑器中 */
				});
			};
			// 创建编辑器
			editor.create();
			this.editor = editor;
		}
	},
	beforeDestroy() {
		// 销毁编辑器
		this.editor.destroy();
		this.editor = null;
	}
};
</script>

注: 具体参数配置请参考编辑器文档使用说明。

组件中使用抽离的编辑器:

<template>
	<div class="editor">
		<el-card shadow="never">
			<div slot="header" class="clearfix">
				<span>富文本编辑器</span>
			</div>
			<div class="card_center">
				<WEditor :defaultText="defaultText" :richText.sync="richText" />
			</div>
		</el-card>
	</div>
</template>

<script>
// 引入封装好的编辑器
import WEditor from "@/components/WEditor";

export default {
	name: "Editor",
	components: { WEditor },
	data() {
		return {
			// 默认值
			defaultText: "",
			// 富文本更新的值
			richText: ""
		};
	},
	created() {
		// 等待组件加载完毕赋值
		this.$nextTick(() => {
			this.defaultText = `<p style="text-align: center; "><img src="https://tr-mba.oss-cn-beijing.aliyuncs.com/picture/202010/20_222430_8011.png" width="30%" style="text-align: center; max-width: 100%;"></p>`;
		});
	}
};
</script>

以上就是vue集成一个支持图片缩放拖拽的富文本编辑器的详细内容,更多关于vue 富文本编辑器的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
vue实现滚动鼠标滚轮切换页面
Dec 13 Vue.js
vue的hash值原理也是table切换实例代码
Dec 14 Vue.js
Vue仿百度搜索功能
Dec 28 Vue.js
vue实现防抖的实例代码
Jan 11 Vue.js
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
Vue实现todo应用的示例
Feb 20 Vue.js
用vite搭建vue3应用的实现方法
Feb 22 Vue.js
vue响应式原理与双向数据的深入解析
Jun 04 Vue.js
vue route新窗口跳转页面并且携带与接收参数
Apr 10 Vue.js
vue动态绑定style样式
Apr 20 Vue.js
vue实现登陆页面开发实践
May 30 Vue.js
Vue 事件的$event参数=事件的值案例
Jan 29 #Vue.js
Vue 3自定义指令开发的相关总结
Jan 29 #Vue.js
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 #Vue.js
vue穿梭框实现上下移动
Jan 29 #Vue.js
vue使用transition组件动画效果的实例代码
Jan 28 #Vue.js
Vue ​v-model相关知识总结
Jan 28 #Vue.js
Vue 数据响应式相关总结
Jan 28 #Vue.js
You might like
基于PHP生成简单的验证码
2016/06/01 PHP
php中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
JavaScript arguments 多参传值函数
2010/10/24 Javascript
基于SVG的web页面图形绘制API介绍及编程演示
2013/06/28 Javascript
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
为python设置socket代理的方法
2015/01/14 Python
python实现隐马尔科夫模型HMM
2018/03/25 Python
python3爬虫之设计签名小程序
2018/06/19 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
Django 实现前端图片压缩功能的方法
2019/08/07 Python
浅析python redis的连接及相关操作
2019/11/07 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
Python json转字典字符方法实例解析
2020/04/13 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
如何使用PHP session
2015/04/21 面试题
学生会竞选自荐信
2013/10/12 职场文书
职业规划书如何设计?
2014/01/09 职场文书
畜牧兽医本科生的自我评价
2014/03/03 职场文书
行政人事岗位职责
2014/03/17 职场文书
班长演讲稿范文
2014/04/24 职场文书
授权委托书
2014/07/31 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
java项目构建Gradle的使用教程
2022/03/24 Java/Android