vue-html5-editor在移动端出现的几个问题以及使用方法
介绍Vue-html5-editor是一个Vue的富文本编辑器插件,简洁灵活可扩展,适用于vue2.0以上版本,支持IE11安装npm:npm install vue-html5-editor --save-dev在main.js里引入并安装为全局组件并添加配置import Vue from 'vue'import VueHtml5Editor from...
介绍
Vue-html5-editor是一个Vue的富文本编辑器插件,简洁灵活可扩展,适用于vue2.0以上版本,支持IE11
安装
npm:
npm install vue-html5-editor --save-dev
在main.js里引入并安装为全局组件并添加配置
import Vue from 'vue'
import VueHtml5Editor from 'vue-html5-editor'
Vue.use(VueHtml5Editor, {
// 全局组件名称,使用new VueHtml5Editor(options)时该选项无效
// global component name
name: "vue-html5-editor",
// 是否显示模块名称,开启的话会在工具栏的图标后台直接显示名称
// if set true,will append module name to toolbar after icon
showModuleName: false,
// 自定义各个图标的class,默认使用的是font-awesome提供的图标
// custom icon class of built-in modules,default using font-awesome
icons: {
text: "fa fa-pencil",
color: "fa fa-paint-brush",
font: "fa fa-font",
align: "fa fa-align-justify",
list: "fa fa-list",
link: "fa fa-chain",
unlink: "fa fa-chain-broken",
tabulation: "fa fa-table",
image: "fa fa-file-image-o",
hr: "fa fa-minus",
eraser: "fa fa-eraser",
undo: "fa-undo fa",
"full-screen": "fa fa-arrows-alt",
info: "fa fa-info",
},
// 配置图片模块
// config image module
image: {
// 文件最大体积,单位字节 max file size
sizeLimit: 512 * 1024,
// 上传参数,默认把图片转为base64而不上传
// upload config,default null and convert image to base64
upload: {
url: null,
headers: {},
params: {},
fieldName: {}
},
// 压缩参数,默认使用localResizeIMG进行压缩,设置为null禁止压缩
// compression config,default resize image by localResizeIMG (https://github.com/think2011/localResizeIMG)
// set null to disable compression
compress: {
width: 1600,
height: 1600,
quality: 80
},
// 响应数据处理,最终返回图片链接
// handle response data,return image url
uploadHandler(responseText){
//default accept json data like {ok:false,msg:"unexpected"} or {ok:true,data:"image url"}
var json = JSON.parse(responseText)
if (!json.ok) {
alert(json.msg)
} else {
return json.data
}
}
},
// 语言,内建的有英文(en-us)和中文(zh-cn)
//default en-us, en-us and zh-cn are built-in
language: "zh-cn",
// 自定义语言
i18n: {
//specify your language here
"zh-cn": {
"align": "对齐方式",
"image": "图片",
"list": "列表",
"link": "链接",
"unlink": "去除链接",
"table": "表格",
"font": "文字",
"full screen": "全屏",
"text": "排版",
"eraser": "格式清除",
"info": "关于",
"color": "颜色",
"please enter a url": "请输入地址",
"create link": "创建链接",
"bold": "加粗",
"italic": "倾斜",
"underline": "下划线",
"strike through": "删除线",
"subscript": "上标",
"superscript": "下标",
"heading": "标题",
"font name": "字体",
"font size": "文字大小",
"left justify": "左对齐",
"center justify": "居中",
"right justify": "右对齐",
"ordered list": "有序列表",
"unordered list": "无序列表",
"fore color": "前景色",
"background color": "背景色",
"row count": "行数",
"column count": "列数",
"save": "确定",
"upload": "上传",
"progress": "进度",
"unknown": "未知",
"please wait": "请稍等",
"error": "错误",
"abort": "中断",
"reset": "重置"
}
},
// 隐藏不想要显示出来的模块
// the modules you don't want
hiddenModules: [],
// 自定义要显示的模块,并控制顺序
// keep only the modules you want and customize the order.
// can be used with hiddenModules together
visibleModules: [
"text",
"color",
"font",
"align",
"list",
"link",
"unlink",
"tabulation",
"image",
"hr",
"eraser",
"undo",
"full-screen",
"info",
],
// 扩展模块,具体可以参考examples或查看源码
// extended modules
modules: {
//omit,reference to source code of build-in modules
}
});
因为vue-html5-editor里使用了font-awesome字体库,需要引入:
npm i font-awesome --save
在main.js里全局引入
import '../node_modules/font-awesome/css/font-awesome.css'
使用
<vue-html5-editor :content="content"></vue-html5-editor>
属性:
content
编辑内容
height
编辑器高度,如果设置了auto-height
为true,将设置为编辑器的最小高度
z-index
层级,将会设置编辑器容量的z-index
样式属性,默认为1000
auto-height
是否自动根据内容控制编辑器高度,默认为true
show-module-name
局部设置是否显示模块名称,会覆盖全局的设定
事件:
change(content)
每次内容有变动时触发,回传改变后的内容,参数为新的html内容
<vue-html5-editor :content="content" @change="updateContent"></vue-html5-editor>
updateContent(content) {
this.content = content
}
具体可以看看github
地址:https://github.com/PeakTai/vue-html5-editor
几个存在的问题
1. 打包后图标显示不出来
这个问题可能是在打包的时候没有检测到使用font-awesome导致其被忽略而未打包进去,造成图标显示不出来
我的解决方案是将font-awesome.css放入项目的静态文件夹里,并在index.html中引入
<link rel="stylesheet" href="./static/css/font-awesome.min.css">
2. vue-html5-editor在ios端提交部分值变成拼音或者值少了
我自己在ios上测试的时候发现,通过下面这块区域选择文字
或者点击选定按钮确定文字
没有触发vue-html5-editor的keyup事件!!
导致在上图我如果选定后content参数里的内容会是 ce shi ce shi 这样子的拼音,但是在富文本内显示的内容是正确的测试测试
解决方案
源码里本来是通过keyup监听,然后将新的html内容回传回去通过change事件接收
本人的解决方案是修改了源码的监听方式,监听div的变化并回传html内容
修改源代码vue-html5-editor.js
1. 搜索 contenteditable 在后面加上 id=\"container\"
2. 搜索 keyup 将框中的内容注释
2. 在后面加上以下代码
const handleListenChange = (mutationsList, observer) => {
this$1.$emit('change', content.innerHTML);
this$1.saveCurrentRange();
}
const mutationObserver = new MutationObserver(handleListenChange)
const element = document.querySelector('#container')
const options = {
attributes: true,
childList: true,
subtree: true,
characterData: true
}
mutationObserver.observe(element, options)
如下:
然后就可以了,在android端上并没有发现这个问题
题外话
前端涉水还未深,有不对的地方或者问题大家可以提出来一起讨论,感谢浏览!
更多推荐
所有评论(0)