写点什么

uniapp 自定义富文本编辑器

  • 2023-04-17
    广东
  • 本文字数:2006 字

    阅读完需:约 7 分钟

uniapp自定义富文本编辑器

前言

在我们使用 uniapp 开发的时候有时会用到富文本编辑器,而 uniapp 官方内置的组件就有富文本编辑器



而示例代码出来的效果有时候样式或者功能和我们所需求的不一致,我们可以通过自定义富文本编辑器来实现自己想要的效果

引入 iconfont

首先在iconfont添加功能图标,这里我创建一个项目简单添加 6 个图标分别是标题,加粗,斜体,下划线,分割线和图片的图标



然后下载到本地,只需保留文件名后缀为 cssttfwoffwoff2 的文件,然后在 uniaap 项目里新建一个 common 文件夹用来存放 iconfont 图标,将文件夹放进 common 文件夹里



在 iconfont.css 文件里修改其他三个文件的引用路径


src: url('@/common/iconfont/iconfont.woff2?t=1669261494046') format('woff2'),       url('@/common/iconfont/iconfont.woff?t=1669261494046') format('woff'),       url('@/common/iconfont/iconfont.ttf?t=1669261494046') format('truetype');
复制代码


最后在 app.vue 文件里 import 导入这个 css 文件


<style lang="scss">    @import url("./common/iconfont/iconfont.css");</style>
复制代码


图标就成功引入了,在页面里使用 font class 方式使用图标,然后就可以看到图标成功显示到页面上了


<view class="content">        <text class="iconfont icon-fengexian"></text></view>
复制代码


自定义富文本编辑器

将 6 个图标全部引入并且添加富文本组件和一个按钮,大概页面就是这样子的


<view>    <view class="tools">        <view class="item"><text class="iconfont icon-zitibiaoti"></text></view>        <view class="item"><text class="iconfont icon-zitijiacu"></text></view>        <view class="item"><text class="iconfont icon-zitixieti"></text></view>        <view class="item"><text class="iconfont icon-zitixiahuaxian"></text></view>        <view class="item"><text class="iconfont icon-fengexian"></text></view>        <view class="item"><text class="iconfont icon-charutupian"></text></view>    </view>    <view class="content">        <editor class="myEditor" placeholder="写点什么儿~"></editor>    </view>    <view class="btn">        <u-button type="primary">确定</u-button>    </view></view>
复制代码



然后就正式开始对富文本组件进行操作了,将需要的属性都加上,如对图片进行操作的属性,组件初始化的方法


<editor class="myEditor" placeholder="写点什么儿~" show-img-size //点击图片时显示图片大小控件 show-img-toolbar //点击图片时显示工具栏控件 show-img-resize  //点击图片时显示修改尺寸控件 @ready="onEditorReady" //初始化 ></editor>
复制代码


在页面进来的时候就要对富文本组件进行一个初始化,获取上下文,将官网获取上下文示例的代码复制粘贴一下,发现控制台报错了,无法获取上下文对象


onEditorReady(){    uni.createSelectorQuery().select('.myEditor').context((res) => {            this.editorCtx = res.context    }).exec()}
复制代码



通过官方文档发现获取节点对象需要添加一个.in(this)这样就不会报错



获取节点对象后添加需要获取的节点内容,通过 fields()获取,往里面添加 context 返回节点对应的 context 对象,在回调函数里接收返回的数据


onEditorReady(){    uni.createSelectorQuery().in(this).select('.myEditor').fields({        context:true    },res=>{        console.log(res);        this.editorCtx = res.context    }).exec()}
复制代码


获取到了上下文就可以对富文本进行编辑,例如当点击分割线的按钮就往富文本里添加一条分割线,直接调用上下文对象的 insertDivider()方法往里添加分割线就行了


addDivider(){    this.editorCtx.insertDivider()}
复制代码



而富文本修改样式如修改标题样式则通过 format()方法去修改样式,传入要修改的属性名和值就行了,我们为标题设置对应的操作


addTitle(){    this.titleShow=!this.titleShow     this.editorCtx.format('header',this.titleShow?'H2':false)}
复制代码



其他的修改样式的按钮也添加对应的操作即可,为了更好的区分,当修改的状态为 true 是字体图标变色,使用 v-bind 的方法为图标动态绑定样式





最后就是上传图片了,上传图片需要配合 uni.chooseImage()方法一起使用,调用 uni.chooseImage()方法从本地相册选择图片成功后使用上下文对象的 insertImage()方法传入图片地址


addImage(){    uni.chooseImage({        success:res=>{            uni.showLoading({                title:'loading...'            })            for(let i=0;i<res.tempFilePaths.length;i++){                this.editorCtx.insertImage({                    src:res.tempFilePaths[i]                })            }            uni.hideLoading()        }    })}
复制代码


一个简单的自定义富文本编辑器就完成了,要想更多功能可以自己添加设置



发布于: 刚刚阅读数: 6
用户头像

你若毁我天堂,我必戳你脊梁 2022-11-01 加入

还未添加个人简介

评论

发布
暂无评论
uniapp自定义富文本编辑器_uni-app_格斗家不爱在外太空沉思_InfoQ写作社区