


This article brings you relevant knowledge about WeChat Mini Program, which mainly introduces practical examples of rich text editor, including creating a publishing page, implementing basic layout, and implementing editing. Let’s take a look at the functions of the area operation bar and other contents. I hope it will be helpful to everyone.
[Related learning recommendations: 小program learning tutorial]
1. Achieve the effect
The effect achieved As shown below:
The implemented function points are as follows:
- Bold, italic, underline text, alignment
- Undo , restore, insert pictures, delete functions.
2. Create a publishing page and implement the basic layout
First create a publishing page article and generate it through configuration in app.json page.
"pages": [ "pages/article/article" ]
In article.wxml, write the structure:
<view> <!-- 文章类型 --> <view> <picker bindchange="bindPickerChange" model:value="{{index}}" range="{{array}}"> <view class="picker"> 文章类型:{{objectArray[index].name}} </view> </picker> </view> <!-- 文章标题 --> <view> <input name="title" class="title" placeholder="请输入文章标题" maxlength="18" model:value="{{title}}"></input> </view> <!-- 编辑区 --> <view class="container"> <view class="page-body"> <view class='wrapper'> <!-- 操作栏 --> <view class='toolbar' bindtap="format"> <i class="iconfont icon-zitijiacu"></i> <i class="iconfont icon-zitixieti"></i> <i class="iconfont icon-zitixiahuaxian"></i> <i class="iconfont icon-zuoduiqi"></i> <i class="iconfont icon-juzhongduiqi"></i> <i class="iconfont icon-youduiqi"></i> <i class="iconfont icon-undo"></i> <i class="iconfont icon-redo"></i> <i class="iconfont icon-charutupian"></i> <i class="iconfont icon-shanchu"></i> </view> <!-- 文章内容区,富文本编辑器 --> <editor id="editor" class="ql-container" placeholder="{{placeholder}}" showImgSize showImgToolbar showImgResize> </editor> <!-- 发布按钮 --> <view class="button" bindtap="formSubmit">发布</view> </view> </view> </view> </view>
In article.wxss, write the basic style:
page{ width: 740rpx; margin: 0 auto; background-color: #f9f9f9; } .title { border: 1rpx solid #f2f2f2; margin: 10rpx; height: 70rpx; line-height: 70rpx; border-radius: 10rpx; } .picker{ padding: 10rpx; } .wrapper { padding: 5px; } .iconfont { display: inline-block; padding: 8px 8px; width: 24px; height: 24px; cursor: pointer; font-size: 20px; } .toolbar { box-sizing: border-box; border-bottom: 0; font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif; } .ql-container { box-sizing: border-box; padding: 12px 15px; width: 100%; min-height: 30vh; height: auto; background: #fff; margin-top: 20px; font-size: 16px; line-height: 1.5; border: 1rpx solid #f2f2f2; border-radius: 15rpx; } .button{ width: 360rpx; height: 80rpx; line-height: 80rpx; text-align: center; margin: auto; margin-top: 50rpx; border-radius: 8rpx; font-size: 32rpx; color: white; background-color: #497749!important; }
At this time we will find that the middle operation bar icon is not displayed. We need to introduce the iconfont.wxss font icon in the header of article.wxss. iconfont.wxss file acquisition address
@import "./assets/iconfont.wxss";
3. Realize the function of the operation bar in the editing area
This article only implements the function of the operation bar and realizes rich text editing. For other article types, please implement it yourself. , it’s not difficult!
First, we need to get the rich text editor instance EditorContext, get it through wx.createSelectorQuery, we are on the page Page function, create the onEditorReady function to obtain the instance:
onEditorReady() { const that = this wx.createSelectorQuery().select('#editor').context(function (res) { that.editorCtx = res.context }).exec() }
Then bind this method to the bindready of the rich text editor On the attribute, it is triggered after the initialization of the rich text editor is completed, thereby obtaining the instance.
<editor id="editor" class="ql-container" placeholder="{{placeholder}}" showImgSize showImgToolbar showImgResize bindstatuschange="onStatusChange" read-only="{{readOnly}}" bindready="onEditorReady">
3.1. Implement text bolding, italics, text underline, left alignment, center alignment, right alignment
How do we modify the style of the text?
- Modify the style through the API provided by the EditorContext instance:
EditorContext.format(string name, string value)
. -
name
: CSS attribute;value
: value.
By consulting the WeChat applet development documentation, we can see that to achieve the above functions, the values of name
and value
we need are:
So how do we modify the text style by clicking the button?
- First we bind the
name
andvalue
attributes to the icon<i></i>
label and fill in the icon Corresponding toname
andvalue
in the above picture, if there is novalue
, just leave it blank. - Then bind the event format on the parent tag, and use the event function to modify the style using
EditorContext.format
API.
<view class='toolbar' bindtap="format"> <i class="iconfont icon-zitijiacu data-name="bold"></i> <i class="iconfont icon-zitixieti data-name="italic"></i> <i class="iconfont icon-zitixiahuaxian data-name="underline"></i> <i class="iconfont icon-zuoduiqi data-name="align" data-value="left"></i> <i class="iconfont icon-juzhongduiqi data-name="align" data-value="center"></i> <i class="iconfont icon-youduiqi data-name="align" data-value="right"></i> </view>
Page format in function Function:
format(e) { let { name, value } = e.target.dataset if (!name) return this.editorCtx.format(name, value) },
Problem: When we click on the icon, the text is changed style, but the style of the icon has not changed, and we cannot be prompted for the current style status of the text. So how to solve it?
- At this time we need to dynamically change the style of the font icon, such as changing the color after clicking the icon.
After consulting the documentation related to editor WeChat applet development, the bindstatuschange attribute binding method will be displayed when you pass Context This method is triggered when changing the style in the editor, and will return the style that has been set in the selection.
Then we can add the formats object in data to store the style attributes after clicking. Then when the icon button is clicked, the set style is obtained and stored in formats through the bindstatuschange binding method; when the template is rendered, in <i></i>
On the class attribute, add {{formats.align === 'right' ? 'ql-active' : ''}}
(such as text to the right), when If you click on this icon, then there is this attribute in formats, then add our dynamic class name ql-active to change the icon color.
具体实现
- 对 editor 标签属性 bindstatuschange 绑定方法 onStatusChange
<editor id="editor" class="ql-container" placeholder="{{placeholder}}" showImgSize showImgToolbar showImgResize bindstatuschange="onStatusChange" read-only="{{readOnly}}" bindready="onEditorReady">
onStatusChange(e) { const formats = e.detail this.setData({ formats }) }
- 在图标
<i></i>
标签上,添加{{formats.align === 'right' ? 'ql-active' : ''}}
<i class="iconfont icon-zitijiacu {{formats.bold ? 'ql-active' : ''}}" data-name="bold"></i> <i class="iconfont icon-zitixieti {{formats.italic ? 'ql-active' : ''}}" data-name="italic"></i> <i class="iconfont icon-zitixiahuaxian {{formats.underline ? 'ql-active' : ''}}" data-name="underline"></i> <i class="iconfont icon-zuoduiqi {{formats.align === 'left' ? 'ql-active' : ''}}" data-name="align" data-value="left"></i> <i class="iconfont icon-juzhongduiqi {{formats.align === 'center' ? 'ql-active' : ''}}" data-name="align" data-value="center"></i> <i class="iconfont icon-youduiqi {{formats.align === 'right' ? 'ql-active' : ''}}" data-name="align" data-value="right"></i>
- 在 article.wxss 添加 ql-active 类
.ql-active { color: #497749; }
3.2. 实现撤销、恢复、插入图片、删除操作
首先在 <i></i>
标签上绑定相应的事件:
<i class="iconfont icon-undo" bindtap="undo"></i> <i class="iconfont icon-redo" bindtap="redo"></i> <i class="iconfont icon-charutupian" bindtap="insertImage"></i> <i class="iconfont icon-shanchu" bindtap="clear"></i>
撤销 undo
调用 EditorContext API 即可
undo() { this.editorCtx.undo() }
恢复 redo
同理
redo() { this.editorCtx.redo() }
插入图片 insertImage
同理
insertImage() { const that = this wx.chooseImage({ count: 1, success: function (res) { wx.showLoading({ title: '正在上传图片', }) wx.cloud.uploadFile({ cloudPath: `news/upload/${time.formatTime(new Date)}/${Math.floor(Math.random() * 100000000)}.png`, // 上传至云端的路径 filePath: res.tempFilePaths[0], success: cover => { that.editorCtx.insertImage({ src: cover.fileID, data: { id: cover.fileID, role: 'god' }, success: function () { wx.hideLoading() } }) } }) } }) }
清空 clear
同理
clear() { this.editorCtx.clear({ success: function (res) { console.log("clear success") } }) }
【相关学习推荐:小程序学习教程】
The above is the detailed content of WeChat Mini Program Practical Project Rich Text Editor Implementation. For more information, please follow other related articles on the PHP Chinese website!

本篇文章给大家带来了关于微信小程序的相关问题,其中主要介绍了关于基础架构原理的相关内容,其中包括了宿主环境、执行环境、小程序整体架构、运行机制、更新机制、数据通信机制等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于微信小程序的相关知识,其中主要介绍了关于云服务的配置详解,包括了创建使用云开发项目、搭建云环境、测试云服务等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于微信小程序的相关知识,其中主要介绍了关于富文本编辑器的实战示例,包括了创建发布页面、实现基本布局、实现编辑区操作栏的功能等内容,下面一起来看一下,希望对大家有帮助。

西安坐地铁用的小程序为“乘车码”。使用方法:1、打开手机微信客户端,点击“发现”中的“小程序”;2、在搜索栏中输入“乘车码”进行搜索;3、直接定位城市西安,或者搜索西安,点击“西安地铁乘车码”选项的“去乘车”按钮;4、根据腾讯官方提示进行授权,开通“乘车码”业务即可利用该小程序提供的二维码来支付乘车了。

本篇文章给大家带来了关于微信小程序的相关问题,其中主要介绍了关于开发工具介绍的相关内容,包括了下载开发工具以及编辑器总结等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于微信小程序的相关知识,其中主要介绍了怎么实现小程序授权登录功能的相关内容,下面一起来看一下,希望对大家有帮助。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

SublimeText3 Linux new version
SublimeText3 Linux latest version

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

WebStorm Mac version
Useful JavaScript development tools

SublimeText3 English version
Recommended: Win version, supports code prompts!
