程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 原生微信小程序

  • uniapp多端开发

    • 快速入门

    • 内置组件

      • 视图容器

      • 基础内容

      • 表单组件

        • 按钮组件
        • 复选框组件
        • 富文本编辑器组件
          • 1. 什么是 editor 组件?
          • 2. editor 组件的常用属性
            • 2.1 设置只读模式 read-only
            • 2.2 图片编辑工具 show-img-toolbar
            • 2.3 内容变化事件 @input
          • 3. 支持的 HTML 标签与样式
            • 3.1 支持的标签
            • 3.2 支持的内联样式
          • 4. 富文本编辑器的使用案例
        • 表单组件
        • 输入框组件
        • 标签组件
        • 选择器组件
        • 嵌入式选择器组件
        • 单选按钮组组件
        • 滑块选择器组件
        • 开关组件
        • 多行输入框组件
      • 路由页面跳转

      • 媒体组件

      • 地图

      • 画布

      • 网页嵌入

      • 页面属性配置节点

      • nvue组件

      • 小程序组件

    • 扩展组件

  • 小程序开发
  • uniapp多端开发
  • 内置组件
  • 表单组件
scholar
2024-10-21
目录

富文本编辑器组件

# 富文本编辑器组件

editor 组件是 Uniapp 中用于实现富文本编辑功能的核心组件,支持文本、图片的混排编辑。该组件兼容 H5、App-vue 和微信小程序等平台,开发者可以使用该组件进行内容的编辑和导出。导出内容支持带标签的 html 和纯文本 text,编辑器内部则采用 delta 格式进行存储。

# 1. 什么是 editor 组件?

editor 组件是用于实现富文本编辑的组件,支持对文本的格式化操作、图片插入、样式设置等功能。在 Web 开发中通常使用 contenteditable 来实现富文本编辑,但该 API 仅在 H5 平台可用。editor 组件为 Uniapp 提供了跨平台的解决方案,兼容 H5、App-vue 和微信小程序。

使用场景

  • 文章编辑:支持文本的加粗、斜体、下划线、对齐等操作,适用于新闻文章、博客等场景。
  • 图片混排:支持在编辑内容中插入图片,并对图片进行大小、对齐等操作。
  • 内容管理系统:在内容管理系统中,富文本编辑是常见的需求,editor 组件可以满足大多数富文本编辑的功能。

# 2. editor 组件的常用属性

editor 组件提供了多种属性,支持对编辑器进行配置,如是否只读、占位符设置、图片编辑工具等。以下是常用属性的详细说明:

属性名 类型 默认值 说明
read-only Boolean false 设置编辑器是否为只读模式。
placeholder String 编辑器未输入内容时的提示信息。
show-img-size Boolean false 是否在点击图片时显示图片大小控件。
show-img-toolbar Boolean false 是否在点击图片时显示图片工具栏控件。
show-img-resize Boolean false 是否在点击图片时显示修改图片尺寸的控件。
@ready EventHandle 编辑器初始化完成时触发。
@focus EventHandle 编辑器聚焦时触发,事件参数 detail 包含 {html, text, delta}。
@blur EventHandle 编辑器失去焦点时触发,事件参数 detail 包含 {html, text, delta}。
@input EventHandle 编辑器内容改变时触发,事件参数 detail 包含 {html, text, delta}。
@statuschange EventHandle 当编辑器内容或格式发生变化时触发,返回选区已设置的样式。

# 2.1 设置只读模式 read-only

  • 说明:设置 read-only 属性为 true 时,编辑器进入只读模式,用户无法进行编辑。
  • 类型:Boolean
  • 默认值:false
<template>
  <view>
    <!-- 只读模式下的富文本编辑器 -->
    <editor :read-only="true" placeholder="这是只读模式" />
  </view>
</template>
1
2
3
4
5
6

# 2.2 图片编辑工具 show-img-toolbar

  • 说明:设置 show-img-toolbar 为 true 时,点击图片会显示图片工具栏,用于修改图片的属性,如对齐方式等。
  • 类型:Boolean
  • 默认值:false
<template>
  <view>
    <!-- 支持图片工具栏的编辑器 -->
    <editor show-img-toolbar placeholder="点击图片以显示工具栏" />
  </view>
</template>
1
2
3
4
5
6

# 2.3 内容变化事件 @input

  • 说明:当编辑器内容发生变化时,会触发 @input 事件,事件参数包含编辑器当前的 html、text 和 delta 内容。
  • 类型:EventHandle
<template>
  <view>
    <!-- 监听编辑器内容变化 -->
    <editor @input="onInput" placeholder="编辑内容将触发 input 事件" />
  </view>
</template>

<script setup>
const onInput = (e) => {
  // 打印编辑器当前的 HTML 内容
  console.log('当前 HTML:', e.detail.html);
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13

# 3. 支持的 HTML 标签与样式

editor 组件支持部分 HTML 标签和内联样式的编辑与渲染。开发者可以通过这些标签和样式进行内容的格式化,丰富编辑器的功能。

# 3.1 支持的标签

以下是 editor 组件支持的 HTML 标签。未被支持的标签会被自动移除或转为支持的标签进行存储。

标签类型 标签 平台差异说明
行内元素 <span> <strong> <b> <ins> <em> <i> <u> <a> <del> <s> <sub> <sup> <img> 其中 <ins> <del> 在百度小程序中不支持
块级元素 <br> <p> <h1> <h2> <h3> <h4> <h5> <h6> <hr> <ol> <ul> <li> 其中 <br> 仅百度小程序支持,<p> 百度小程序不支持

# 3.2 支持的内联样式

以下是 editor 组件支持的内联样式,支持在行内元素或块级元素上设置。不同平台支持的样式有所差异。

样式类型 样式 平台差异说明
块级样式 text-align direction margin padding line-height text-indent 百度小程序仅支持 text-align 和 direction
行内样式 font font-size font-style font-weight color background-color 百度小程序仅支持 color 和 background-color

# 4. 富文本编辑器的使用案例

以下案例展示了 editor 组件的实际应用,展示了文本编辑、图片插入与工具栏、内容变化监听等常用功能。

<template>
  <view class="container">
    <view class="page-body">
      <!-- 富文本编辑器工具栏 -->
      <view class="toolbar" @tap="formatText">
        <button data-name="bold">加粗</button>
        <button data-name="italic">斜体</button>
        <button data-name="underline">下划线</button>
        <button data-name="insertImage">插入图片</button>
      </view>

      <!-- 富文本编辑器 -->
      <editor id="editor" placeholder="开始编辑..." show-img-toolbar show-img-resize @input="onInput" @ready="onEditorReady" />
    </view>
  </view>
</template>

<script setup>
import { ref } from 'vue';

// 创建 editorCtx 用于控制编辑器
let editorCtx = ref(null);

// 监听编辑器内容变化
const onInput = (e) => {
  console.log('当前 HTML 内容:', e.detail.html);
};

// 编辑器初始化完成时触发
const onEditorReady = () => {
  uni.createSelectorQuery()
    .select('#editor')
    .context((res) => {
      editorCtx.value = res.context;
    })
    .exec();
};

// 格式化文本,如加粗、斜体等
const formatText = (e) => {
  const { name } = e.target.dataset;
  if (name === 'insertImage') {
    uni.chooseImage({
      count: 1,
      success: (res) => {
        editorCtx.value.insertImage({
          src: res.tempFilePaths[0],
          alt: '图片',
        });
      },
    });
  } else {
    editorCtx.value.format(name);
  }
};
</script>

<style scoped>
/* 工具栏样式 */
.toolbar {
  display: flex;
  justify-content: space-around;
  padding: 10px;
  background-color: #f5f5f5;
}

button {
  padding: 10px;
  background-color: #007aff;
  color: white;
  border: none;
  border-radius: 5px;
  cursor: pointer;
}

button:hover {
  background-color: #005bb5;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

recording

编辑此页 (opens new window)
上次更新: 2025/02/01, 02:18:15
复选框组件
表单组件

← 复选框组件 表单组件→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式