因为我的项目须要 @谁来看的性能,所以依据官网 editor 二次封装了一个富文本编辑器,想着可能你们心愿本人定义编辑器按钮,所以把按钮组件提出来了,你能够自在更换,想着你可能更心愿基于 api 本人设计编辑器,所以把性能都给你封装到 Class Edit 类了,你只需 new Edit,外面丰盛的 api 就都是你的了。
插件地址:https://ext.dcloud.net.cn/plugin?name=lsj-edit
创作不易,若能帮到你请不要手软点亮 5 颗星~
- 此组件是对 editor 组件二次封装,减少了相似微信的 @谁来看 和 相似微博的插入 #话题等性能
- 如心愿插入话题或 @后光标不指向最初而指向话题前面,须要在 editor 组件源码退出一段代码,须要能够加 Q 群发你
- 为了不便大家更换按钮控件,我将控制器按钮和编辑器画布拆分成了两个组件
- 你齐全能够自定义编辑器,所有性能都封装到了 edit 类,不便各位调用, 查看 Edit 具体文档
-
属性 |
是否必填 |
值类型 |
默认值 / 返回值 |
阐明 |
html |
否 |
String |
– |
初始化时加载的 html,例如加载草稿 |
placeholder |
否 |
String |
开始输出 |
编辑器提示信息 |
maxCount |
否 |
Number |
0 |
最大输出字数,含空格和符号,超出最大限度时 Edit 返回 overstep:true |
readOnly |
否 |
Boolean |
false |
编辑器是否只读 |
styles |
否 |
Object |
– |
编辑器自定义款式 |
showImgSize |
否 |
Boolean |
true |
点击图片时显示图片大小控件 |
showImgToolbar |
否 |
Boolean |
true |
点击图片时显示工具栏控件 |
showImgResize |
否 |
Boolean |
true |
点击图片时显示批改尺寸控件 |
@onReady |
否 |
Function |
[Class] Edit |
编辑器初始化实现触发回调,返回 edit 实例对象 |
属性 |
是否必填 |
值类型 |
默认值 / 返回值 |
阐明 |
edit |
是 |
[Class] Edit |
– |
将 edit 对象传入和应用 |
color |
否 |
String |
#999999 |
Tab 栏字体默认色彩 |
selectedColor |
否 |
String |
#00aaff |
Tab 栏字体选中色彩 |
fontColor |
否 |
Array |
Array |
字体罕用色彩数组 |
bgColor |
否 |
Array |
Array |
字体罕用背景色数组 |
tabs |
否 |
Array |
#、@ |
Tab 栏是否须要显示 #和 @ |
emojiList |
否 |
Array |
true |
emoji 列表 |
@click |
否 |
Function |
Object {name,index} |
点击 Tab 栏时回调 |
@submit |
否 |
Function |
Class Edit |
点击 Tab 栏右侧提交按钮时回调 |
| <lsj-edit |
| ref="lsjEdit" |
| placeholder="输出注释" |
| :maxCount="200" |
| @onReady="editReady"> |
| <template v-slot:btns="data"> |
| <edit-btns |
| :edit="data.edit" |
| @click="onTabClick" |
| @submit="save"></edit-btns> |
| </template> |
| </lsj-edit> |
| import editBtns from '@/uni_modules/lsj-edit/components/lsj-edit/edit-btns/edit-btns.vue'; |
| export default { |
| components:{ |
| |
| editBtns |
| }, |
| data() { |
| return {edit: null} |
| }, |
| methods: { |
| |
| editReady(edit) { |
| |
| this.edit = edit; |
| }, |
| |
| onTabClick({name,index}) {switch (index){ |
| |
| case 0: |
| this.addLink(); |
| break; |
| |
| case 1: |
| this.addLink2(); |
| break; |
| default: |
| break; |
| } |
| }, |
| |
| async save() { |
| |
| let imgs = await this.edit.getImages() |
| |
| if (!this.edit.textCount && !imgs.length) { |
| uni.showToast({title: '请录入内容'}); |
| } |
| |
| |
| this.edit.replaceImage(async(img)=>{ |
| |
| |
| |
| |
| if(img.indexOf('http') === 0) {return img;} |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| return 'https://t7.baidu.com/it/u=3406125714,2513313326&fm=193&f=GIF' |
| |
| }).then(res=>{console.log('替换实现, 最终内容为',JSON.stringify(res)); |
| |
| |
| uni.navigateTo({url: '/pages/article/article?data='+escape(res.html) |
| }); |
| }); |
| |
| }, |
| |
| addLink() { |
| this.edit.addLink({ |
| prefix: '#', |
| suffix: '#', |
| name: '有问题欢送退出 LSJ 插件交换群', |
| data: { |
| name: 'QQ 交换群', |
| qqGroupChatID: '667530868', |
| } |
| }) |
| }, |
| |
| addLink2() { |
| this.edit.addLink({ |
| prefix: '@', |
| name: '马冬梅', |
| data: {userId: 10,} |
| }) |
| } |
| } |
| } |
- 调用 editorContext 对象的事件,如撤销 undo, 复原 redo, 清空内容 clear, 失焦 blur 等
- 调用形式:edit.tool(‘blur’)
参数 |
阐明 |
name |
editorContext 对象的事件名称,如撤销 undo, 复原 redo, 清空内容 clear 等 |
value |
editorContext 事件参数,如初始化 html 内容 edit.tool(‘setContents’,{html}), 设置文本 edit.tool(‘insertText’,{text}) |
- 批改款式, 反对的值可查看 editorContext format
- 调用形式:edit.format(‘color’,’#999999′)
- 获取编辑器内容, 返回 Promise.resolve
- 调用形式:await edit.getContents()
- 使光标进入编辑器并唤起键盘
- 调用形式:edit.upKeyboard()
- 插入 emoji 表情
- 调用形式:edit.emoji(‘😀’)
- 插入带参数的链接,如插入 #话题或 @谁
- 调用形式:edit.addLink(Object)
参数 |
必填 |
阐明 |
prefix |
否 |
在插入的内容后面增加一串字符,例如 @谁 |
suffix |
否 |
在插入的内容前面增加一串字符,例如 #话题 #的 #号 |
name |
是 |
插入的字符串 |
data |
否 |
链接附带的参数,用于解析后点击该链接返回 |
- 获取编辑器内增加的所有链接
- 调用形式:edit.getLink()
- 通过相册 / 相机抉择图片并增加到编辑器中,此时图片是本地门路,在公布前应将图片上传,具体可查看示例我的项目 index.vue 提交事件示例;
- 调用形式:edit.addImage(tempFilePaths)
参数 |
类型 |
必填 |
阐明 |
tempFilePaths |
Array |
否 |
不传参数时调起相册 / 相机抉择,传入图片数组时直接插入 |
- 获取编辑器内增加的所有图片
- 调用形式:edit.getImages()
- 替换图片,编辑器内每个图片都会触发传入的 fn, 依据须要可自行替换成新的图片地址,用于将本地图片上传到服务器
- 必须传入 Function,且必须 return 一个图片地址
- 调用形式:edit.replaceImage(fn)
参数 |
类型 |
必填 |
阐明 |
fn |
Function |
是 |
return 的图片地址将替换之前的图片 |
| |
| edit.replaceImage(async(img)=>{ |
| |
| |
| |
| |
| if(img.indexOf('http') === 0) {return img;} |
| |
| |
| let {data} = await uni.uploadFile({ |
| url: 'https://www.example.com/upload', |
| filePath: img, |
| name: 'file', |
| formData: {'user': 'test'} |
| }); |
| return data; |
| |
| }).then(res=>{console.log('所有图片替换实现, 返回最新的 detail',JSON.stringify(res)); |
| }); |
- Edit 为您设计了观察者模式,您能够在须要的中央注册和发送事件
- 注册事件
-
示例:
| edit.$on('edit:focus',(e)=> {console.log('监听光标进入',e); |
| }) |
- 移除某个注册的事件
-
示例:
| edit.$off('edit:focus', (e)=> {console.log('监听光标进入',e); |
| }); |
事件 |
阐明 |
edit:input |
编辑器内输出或删除内容时触发 |
edit:statuschange |
光标所指向的内容款式变动时触发,返回以后款式 |
edit:focus |
焦点进入时触发 |
edit:blur |
焦点来到时触发 |
- 如阐明表白还不够分明,不分明怎么应用可导入残缺示例我的项目运行体验和查看
- 欢送退出 QQ 探讨群:701468256(已满)
- 欢送退出 QQ 探讨群:469580165(已满)
- 欢送退出 QQ 探讨群:667530868
- 若能帮到你还请点亮 5 颗小星星以作激励哈~
- 若能帮到你还请点亮 5 颗小星星以作激励哈~
- 若能帮到你还请点亮 5 颗小星星以作激励哈~