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图片裁剪插件vue-cropper使用方法详解
Dec 16 Vue.js
vue 导航守卫和axios拦截器有哪些区别
Dec 19 Vue.js
vue 动态生成拓扑图的示例
Jan 03 Vue.js
vue二选一tab栏切换新做法实现
Jan 19 Vue.js
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
vue3.0中使用element的完整步骤
Mar 04 Vue.js
如何让vue长列表快速加载
Mar 29 Vue.js
Vue+Element UI实现概要小弹窗的全过程
May 30 Vue.js
Vue3中的Refs和Ref详情
Nov 11 Vue.js
详解Vue的列表渲染
Nov 20 Vue.js
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 Vue.js
Vue中使用import进行路由懒加载的原理分析
Apr 01 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 date()日期时间函数详解
2010/05/16 PHP
PHP 防注入函数(格式化数据)
2011/08/08 PHP
php编写的简单页面跳转功能实现代码
2013/11/27 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
javascript中expression的用法整理
2014/05/13 Javascript
javascript操作符&quot;!~&quot;详解
2015/02/10 Javascript
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
Python内建数据结构详解
2016/02/03 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
python的concat等多种用法详解
2018/11/28 Python
python异步存储数据详解
2019/03/19 Python
python:动态路由的Flask程序代码
2019/11/22 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
Python如何定义接口和抽象类
2020/07/28 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
运输服务质量承诺书
2014/03/27 职场文书
学习保证书范文
2014/04/30 职场文书
机械工程师岗位职责
2014/06/16 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
硕士论文致谢范文
2015/05/14 职场文书
恰同学少年观后感
2015/06/08 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery