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 相关文章推荐
vue 在服务器端直接修改请求的接口地址
Dec 19 Vue.js
vue中如何添加百度统计代码
Dec 19 Vue.js
Vue组件简易模拟实现购物车
Dec 21 Vue.js
Vue仿Bibibili首页的问题
Jan 21 Vue.js
详解vue3中组件的非兼容变更
Mar 03 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
Vue和Flask通信的实现
May 19 Vue.js
vue实现水波涟漪效果的点击反馈指令
May 31 Vue.js
vue中div禁止点击事件的实现
Apr 02 Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
May 06 Vue.js
vue @ ~ 相对路径 路径别名设置方式
Jun 05 Vue.js
Vue router配置与使用分析讲解
Dec 24 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 adodb介绍
2009/03/19 PHP
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
PHP 文件系统详解
2012/09/13 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
PHP序列化操作方法分析
2016/09/28 PHP
微信公众平台开发(五) 天气预报功能开发
2016/12/03 PHP
JavaScript 函数式编程的原理
2009/10/16 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
微信小程序实现侧边栏分类
2019/10/21 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
JS实现吸顶特效
2020/01/08 Javascript
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
浅谈Python中函数的参数传递
2016/06/21 Python
轻松掌握python设计模式之访问者模式
2016/11/18 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
Python装饰器原理与用法分析
2018/04/30 Python
python 3.6.2 安装配置方法图文教程
2018/09/18 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
Python any()函数的使用方法
2019/10/28 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
高中毕业自我鉴定
2013/12/19 职场文书
简历中个人自我评价分享
2014/03/15 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python