editor
富文本编辑器,可以对图片、文字进行编辑。
编辑器导出内容支持带标签的 html
和纯文本的 text
,编辑器内部采用 delta
格式进行存储。
通过setContents
接口设置内容时,解析插入的 html
可能会由于一些非法标签导致解析错误,建议开发者在应用内使用时通过 delta 进行插入。
富文本组件内部引入了一些基本的样式使得内容可以正确的展示,开发时可以进行覆盖。需要注意的是,在其它组件或环境中使用富文本组件导出的html时,需要额外引入 这段样式,并维护<ql-container><ql-editor></ql-editor></ql-container>
的结构。
图片控件仅初始化时设置有效。
相关 api:EditorContext
属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|---|
read-only | Boolean | false | 否 | 设置编辑器为只读 | |
placeholder | String | 否 | 提示信息 | ||
show-img-size | Boolean | false | 否 | 点击图片时显示图片大小控件 | |
show-img-toolbar | Boolean | false | 否 | 点击图片时显示工具栏控件 | |
show-img-resize | Boolean | false | 否 | 点击图片时显示修改尺寸控件 | |
bindready | EventHandle | 否 | 编辑器初始化完成时触发 | ||
bindfocus | EventHandle | 否 | 编辑器聚焦时触发,event.detail = {html, text, delta} | ||
bindblur | EventHandle | 否 | 编辑器失去焦点时触发,detail = {html, text, delta} | ||
bindinput | EventHandle | 否 | 编辑器内容改变时触发,detail = {html, text, delta} | ||
bindstatuschange | EventHandle | 否 | 通过 Context 方法改变编辑器内样式时触发,返回选区已设置的样式 |
Tips:
- 使用 Quill 富文本编辑器,具体支持标签查看相关文档。
示例代码:
<!--pages/component/pages/editor/editor.mcml-->
<view class="container">
<view class="statement">富文本编辑器</view>
<editor
id="editor"
editor-id="aaa"
placeholder="请输入内容"
read-only="{{readOnly}}"
show-img-size="{{showImgSize}}"
show-img-toolbar="{{showImgToolbar}}"
show-img-resize="{{showImgResize}}"
bindready="bindready"
bindfocus="bindfocus"
bindblur="bindblur"
bindinput="bindinput"
bindstatuschange="bindstatuschange"></editor>
<view>
<button bindtap="setReadOnly">设置只读{{readOnly}}</button>
<button bindtap="setContent">设置文本内容</button>
<button bindtap="clearContent">清空文本内容</button>
<button bindtap="setShowImgSize">显示图片大小{{showImgSize}}</button>
<button bindtap="setShowImgToolbar">显示图片工具栏{{showImgToolbar}}</button>
<button bindtap="setShowImgResize">允许修改图片尺寸{{showImgResize}}</button>
</view>
<view class="cssname">bindready:编辑器初始化完成时触发, 参数event.detail</view>
<text space="nbsp" user-select="true" class="scrollDetail">{{readyDetail}}</text>
<view class="cssname">bindfocus:编辑器聚焦时触发, 参数event.detail</view>
<text space="nbsp" user-select="true" class="scrollDetail">{{focusDetail}}</text>
<view class="cssname">bindblur:编辑器失去焦点时触发, 参数event.detail</view>
<text space="nbsp" user-select="true" class="scrollDetail">{{blurDetail}}</text>
<view class="cssname">bindinput:编辑器内容改变时触发, 参数event.detail</view>
<text space="nbsp" user-select="true" class="scrollDetail">{{inputDetail}}</text>
<view class="cssname">bindstatuschange:通过 Context 方法改变编辑器内样式时触发,返回选区已设置的样式, 参数event.detail</view>
<text space="nbsp" user-select="true" class="scrollDetail">{{statuschangeDetail}}</text>
</view>
// pages/component/pages/editor/editor.js
Page({
data: {
readOnly: false,
showImgSize: true,
showImgToolbar: true,
showImgResize: true
},
content: [
'行内元素:',
'<span><span></span>',
'<strong><strong></strong>',
'<b><b></b>',
'<ins><ins></ins>',
'<em><em></em>',
'<i><i></i>',
'<u><u></u>',
'<a href="https://www.morecross.cn/"><MoreCross></a>',
'<del><del></del>',
'<s><s></s>',
'<sub><sub></sub>',
'<sup><sup></sup>',
'<img src="https://cn.bing.com/th?id=OHR.ReddishEgret_EN-CN3104674362_UHD.jpg"><img></img>',
'<br/>块级元素:',
'<p><p></p>',
'<h1><h1></h1>',
'<h2><h2></h2>',
'<h3><h3></h3>',
'<h4><h4></h4>',
'<h5><h5></h5>',
'<h6><h6></h6.',
'<hr><hr></hr>',
'<ol><ol></ol>',
'<ul><ul><li><li></li></ul>'
],
setReadOnly: function(e){
this.setData({
readOnly: !this.data.readOnly
})
},
setContent: function(e){
var _this = this;
mc.createSelectorQuery().select('#editor').context(function(res){
res.context.setContents({
html: _this.content.join(' '),
fail: function (res) {
console.error(res);
}
});
}).exec();
},
clearContent: function(e){
mc.createSelectorQuery().select('#editor').context(function(res){
res.context.clear();
}).exec();
},
setShowImgSize: function(){
this.setData({
showImgSize: !this.data.showImgSize
})
},
setShowImgToolbar: function(){
this.setData({
showImgToolbar: !this.data.showImgToolbar
})
},
setShowImgResize: function(){
this.setData({
showImgResize: !this.data.showImgResize
})
},
bindready: function(e){
this.setData({
readyDetail: JSON.stringify(e, null, 2)
})
},
bindfocus: function(e){
this.setData({
focusDetail: JSON.stringify(e, null, 2)
})
},
bindblur: function(e){
this.setData({
blurDetail: JSON.stringify(e, null, 2)
})
},
bindinput: function(e){
console.log(e);
this.setData({
inputDetail: JSON.stringify(e, null, 2)
})
},
bindstatuschange: function(e){
this.setData({
statuschangeDetail: JSON.stringify(e, null, 2)
})
}
})