前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏

文章目录

    • ⭐前言
    • ⭐引入ckeditor
      • ⭐npm 包引入
      • ⭐cdn资源引入
    • ⭐自定义插件
      • 💖 自定义yma16配置插件
    • ⭐总结
    • ⭐结束

yma16-logo

⭐前言

大家好,我是yma16,本文分享关于前端react整合ckeditor——配置插件、自定义toolbar工具栏。
react系列往期文章:
react-grapesjs——开源代码学习与修改(初出茅庐)
react搭建在线编辑html的站点——引入grapes实现在线拖拉拽编辑html
【腾讯云 Cloud studio 实战训练营】搭建Next框架博客——抛开电脑性能在云端编程(沉浸式体验)
博客搭建_react-markdown渲染内容
博客搭建_登录注册
博客搭建_初始化next项目
关于ckeditor
CKEditor是一种强大的可嵌入式编辑器,用于在Web浏览器中编辑文本内容。它支持HTML,CSS和JavaScript,可以用于创建富文本编辑器,包括文本格式化,图像和视频插入,链接,表格等。 CKEditor提供许多插件,以便用户可以自定义其编辑器的外观和功能。它是由CKSource公司开发和维护的开源软件。
ckeditor发展历史
CKEditor是一个开源的WYSIWYG HTML编辑器,最初由FredCK创建,在2003年发布第一个版本。在经过多个版本的更新和改进之后,CKEditor 4在2012年发布,它是一个完全重构的版本,具有更好的性能和更好的可扩展性。

在CKEditor 4发布后,它成为了最流行的HTML编辑器之一,并在全球范围内广受欢迎。CKEditor 4的成功得益于其强大的功能和易于使用的界面,以及灵活的插件系统和丰富的文档支持。

CKEditor 4的发展历程如下:

  • 2003年:CKEditor的第一个版本发布,这是一个基于Javascript的HTML编辑器。

  • 2005年:CKEditor 2发布,这是一个完全重构的版本,具有更多的功能和更好的性能。

  • 2008年:CKEditor 3发布,这是一个基于Web标准的编辑器,具有更加现代的界面和更好的可访问性。

  • 2012年:CKEditor 4发布,这是一个完全重构的版本,具有更好的性能和更好的可扩展性。

随着Web技术的不断发展,CKEditor团队不断更新和改进编辑器,以适应最新的Web标准和技术。最新的版本是CKEditor 5,它是一个全新的版本,具有更加现代化的界面和更好的可访问性。

⭐引入ckeditor

ckeditor4的官网配置:https://ckeditor.com/docs/ckeditor4/latest/guide/dev_installation.html
ckeditor 的两种模式

  • Classic Editing 典型编辑器
  • Inline Editing 内联编辑器

**Classic Editing **
编辑器通常由放置在页面上特定位置的工具栏和编辑区域表示,通常作为表单的一部分
Inline Editing
内联编辑是 CKEditor 4中引入的一项新技术,它允许您选择页面上的任何可编辑元素并就地进行编辑。因此,编辑器可用于编辑看起来与最终页面相似的内容。
悬浮的tooltip工具栏
区别
Classic Editing 工具栏位置固定
Inline Editing 工具栏位置悬浮在选择字体的周围

效果预览:
https://yongma16.xyz/react-mjml/

⭐npm 包引入

安装ckeditor

$ npm install ckeditor4-react

官网案例 Classic Editing

import React from 'react';
import { CKEditor } from 'ckeditor4-react';function App() {return (<div className="App"><h2>Using CKEditor 4 in React</h2><CKEditorinitData="<p>Hello from CKEditor 4!</p>"onInstanceReady={ () => {alert( 'Editor is ready!' );} }/></div>);
}export default App;

这里我作为组件引入
效果:
ckeditor-npm

⭐cdn资源引入

在ckeditor4的官网下载:https://ckeditor.com/ckeditor-4/download/
下载开源的源码包
down-source-ckeditor
在react的静态资源文件中引入,放入public文件目录
public-ckeditor
Inline Editing 案例使用
index.html引入ckeditor

<script src="./ckeditor/ckeditor.js"></script>

如下图所示
cdn-import

CkeditorPage.tsx


import { useEffect } from "react";const CkeditorPage=(props:any)=>{useEffect(()=>{if(CKEDITOR){// @ts-ignoreCKEDITOR.disableAutoInline = true;// @ts-ignoreCKEDITOR.inline( 'editor1' );}},[])return <><div id="editor1" contentEditable="true"><h1>Inline Editing in Action!</h1><p>The "div" element that contains this text is now editable.</p></div></>
};export default CkeditorPage;

其中销毁ckeditor的方法如下:

for(name in CKEDITOR.instances)
{CKEDITOR.instances[name].destroy()
}

内联编辑器的效果
render
选中字体才出现工具栏,专注于预览效果。
focus-tools

⭐自定义插件

官方案例:https://ckeditor.com/docs/ckeditor4/latest/guide/plugin_sdk_sample.html
官网案例添加时间撮timestamp

CKEDITOR.plugins.add( 'timestamp', {icons: 'timestamp',init: function( editor ) {editor.addCommand( 'insertTimestamp', {exec: function( editor ) {var now = new Date();editor.insertHtml( 'The current date and time is: <em>' + now.toString() + '</em>' );}});editor.ui.addButton( 'Timestamp', {label: 'Insert Timestamp',command: 'insertTimestamp',toolbar: 'insert'});}
});

💖 自定义yma16配置插件

在plugin目录添加csdn-yma16文件夹
编写plugin.js插件
plugin.js

(function() {CKEDITOR.plugins.add("csdn-yma16", {requires: ["dialog"],init: function(a) {a.addCommand("csdn-yma16", new CKEDITOR.dialogCommand("csdn-yma16"));a.ui.addButton("csdn-yma16", {label: "csdn-yma16",//调用dialog时显示的名称command: "csdn-yma16",icon: this.path + "icons/yma16.jpg"//在toolbar中的图标});console.log('this.path',this.path)CKEDITOR.dialog.add("csdn-yma16", this.path + "dialogs/csdn-yma16.js")}})})();

dialogs/csdn-yma16.js

CKEDITOR.dialog.add('csdn-yma16', function (editor) { //要和plugin.js 中的command 一致var escape = function (value) {return value;};return {title: '', //对话框标题minWidth: 500, //对话框宽度minHeight: 600,//对话框高度contents: [{   //对话框内容id: 'choice',name: 'choice',label: '插入选择题答案',title: '插入选择题答案',elements: [{id: 'yma16_1',type: 'radio', //表单元素类型:单选按钮items: [['csdn','[博客]'],['juejin','[博客]']]},{id: 'yma16_2',type: 'radio', //表单元素类型:单选按钮items: [['huawei','[芯片]'],['apple','[美国芯片]']]},{id: 'yma16_3',type: 'radio', //表单元素类型:单选按钮items: [['name','[姓名]']]}]}],onOk: function () { //点击确定按钮出发onOK事件。以下代码主要目的是构造一个select下拉框let a = this.getValueOf('choice', 'yma16_1');let b = this.getValueOf('choice', 'yma16_2');let c = this.getValueOf('choice', 'yma16_3');let rtn = "";if(a != null){rtn += a;}if(b != null){rtn += b;}if(c != null){rtn += c;}if (rtn != "") {rtns = "{{"+rtn+"}}";editor.insertHtml(rtns);}else {return false;}}};
});
function htmlEncode(str) {var temp = document.createElement("div");(temp.textContent != null) ? (temp.textContent = str) : (temp.innerText = str);var output = temp.innerHTML;temp = null;return output;
}

classical Editor 效果
插件位置
tools-location
dialog效果
dialog-css
插入样式
insert-font

Inline Editor 内联编辑器样式
inline-css

⭐总结

ckeditor编辑器两种用法区别

  1. Inline Editor 内联编辑器 选择字体才出现工具栏,用户视觉体验较好
  2. classical Editor 经典编辑器 工具栏默认固定位置展示,用户编辑体验较好

ckeditor编辑器自定义tools
a. 在editor入口plugin添加,需要了解plugin文档,目录结构清晰
b. 需要遵循ckeditor的api进行开发

富文本编辑器的优势

富文本编辑器具有以下优势:

  1. 易于使用:富文本编辑器可以帮助用户轻松地创建和编辑富文本内容,无需进行复杂的编程或设计工作。

  2. 可视化编辑:富文本编辑器提供了可视化编辑界面,用户可以直接在页面上进行编辑和调整,便于实时预览和调整。

  3. 自定义样式:使用富文本编辑器可以自定义字体、颜色、大小、对齐方式、缩进、列表等样式,并且可以在后台进行管理和编辑。

  4. 粘贴清理:富文本编辑器可以自动清理粘贴的文本,去除不需要的格式和样式,提高文本的可读性和美观度。

  5. 适应性强:富文本编辑器可以适应不同的浏览器和设备,并且可以提供不同的插件和功能,以满足不同的需求。

  6. 可扩展性:富文本编辑器可以通过插件和API进行扩展和自定义,以支持更多的功能和需求。

⭐结束

本文分享到这结束,如有错误或者不足之处欢迎指出!
scene

👍 点赞,是我创作的动力!
⭐️ 收藏,是我努力的方向!
✏️ 评论,是我进步的财富!
💖 感谢你的阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/140352.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

大数据的崭露头角:数据湖与数据仓库的融合之道

文章目录 数据湖与数据仓库的基本概念数据湖&#xff08;Data Lake&#xff09;数据仓库&#xff08;Data Warehouse&#xff09; 数据湖和数据仓库的优势和劣势数据湖的优势数据湖的劣势数据仓库的优势数据仓库的劣势 数据湖与数据仓库的融合之道1. 数据分类和标记2. 元数据管…

停车场系统源码

源码下载地址&#xff08;小程序开源地址&#xff09;&#xff1a;停车场系统小程序&#xff0c;新能源电动车充电系统&#xff0c;智慧社区物业人脸门禁小程序: 【涵盖内容】&#xff1a;城市智慧停车系统&#xff0c;汽车新能源充电&#xff0c;两轮电动车充电&#xff0c;物…

KT142C语音芯片flash型用户如何更新固件的说明_V2

目录 一、简介 2.1 让芯片进入PC模式 2.2 双击提供的exe程序即可 一、简介 正常的情况下&#xff0c;用户肯定是不需要更新固件的&#xff0c;因为芯片出厂默认就烧录了对应的程序固件&#xff0c;但是有客户可能需要小修小改&#xff0c;或者订制一下某些功能&#xff0c…

Linux 链表示例 LIST_INIT LIST_INSERT_HEAD

list(3) — Linux manual page 用Visual Studio 2022创建CMake项目 * CmakeLists.txt # CMakeList.txt : Top-level CMake project file, do global configuration # and include sub-projects here. # cmake_minimum_required (VERSION 3.12)project ("llist")# I…

JVM高级性能调试

标准的JVM是配置为了高吞吐量&#xff0c;吞吐量是为了科学计算和后台运行使用&#xff0c;而互联网商业应用&#xff0c;更多是为追求更短的响应时间&#xff0c;更低的延迟Latency&#xff08;说白了就是更快速度&#xff09;&#xff0c;当用户打开网页没有快速响应&#xf…

多线程带来的的风险-线程安全

多线程带来的的风险-线程安全 ~~ 多线程编程中,最难的地方,也是一个最重要的地方&#xff0c;还是一个最容易出错的地方,更是一个面试中特别爱考的地方.❤️❤️❤️ 线程安全的概念 万恶之源,罪魁祸首是多线程的抢占式执行,带来的随机性.~~&#x1f615;&#x1f615;&…

LeetCode75-06:移动零

移动零 初版(bug) func moveZeroes(nums []int) {if len(nums) 1{return}// 设置两个指针fp1,fp2分别指向第一个元素和第二个元素&#xff0c;// 两种情况// 假如指针fp1指向元素为零// 1) *fp2!0&#xff0c;则交换。// 2) *fp20&#xff0c;则fp2后移,直至*fp2!0,与fp1交换…

idea如何关闭项目文件显示的浏览器图标

这里写自定义目录标题 1.idea经常项目文件右上角弹出图标2.setting中Tools 取消勾选浏览器 1.idea经常项目文件右上角弹出图标 2.setting中Tools 取消勾选浏览器

深度学习自学笔记二:逻辑回归和梯度下降法

目录 一、逻辑回归 二、逻辑回归的代价函数 三、梯度下降法 一、逻辑回归 逻辑回归是一种常用的二分类算法&#xff0c;用于将输入数据映射到一个概率输出&#xff0c;表示为属于某个类别的概率。它基于线性回归模型&#xff0c;并使用了sigmoid函数作为激活函数。 假设我们…

数据结构与算法-时间复杂度与空间复杂度

数据结构与算法 &#x1f388;1.概论&#x1f52d;1.1什么是数据结构&#xff1f;&#x1f52d;1.2什么是算法&#xff1f; &#x1f388;2.算法效率&#x1f52d;2.1如何衡量一个算法的好坏&#xff1f;&#x1f52d;2.2算法的复杂度&#x1f52d;2.3时间复杂度&#x1f4d6;2…

【数据结构】七大排序算法详解

目录 ♫什么是排序 ♪排序的概念 ♪排序的稳定性 ♪排序的分类 ♪常见的排序算法 ♫直接插入排序 ♪基本思想 ♪算法实现 ♪算法稳定性 ♪时间复杂度 ♪空间复杂度 ♫希尔排序 ♪基本思想 ♪算法实现 ♪算法稳定性 ♪时间复杂度 ♪空间复杂度 ♫直接选择排序 ♪基本思想 ♪算法…

MongoDB【部署 02】mongodb使用配置文件启动、添加为系统服务及自启动(一个报错:[13436][NotMasterOrSecondary])

MongoDB使用配置文件启动、添加为系统服务及设置自启动 1.是什么2.下载安装启动配置2.1 下载2.2 安装2.3 配置2.4 使用配置文件启动 3.设置系统服务及自启动3.1 设置为系统服务3.2 自启动 1.是什么 【以下内容来自ChatGPT3.5】 MongoDB是一个流行的开源文档型数据库管理系统&a…

SpringBoot实战(二十四)集成 LoadBalancer

目录 一、简介1.定义2.取代 Ribbon3.主要特点与功能4.LoadBalancer 和 OpenFeign 的关系 二、使用场景一&#xff1a;Eureka LoadBalancer服务A&#xff1a;loadbalancer-consumer 消费者1.Maven依赖2.application.yml配置3.RestTemplateConfig.java4.DemoController.java 服务…

力扣刷题-链表理论基础

什么是链表 什么是链表&#xff0c;链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;&#xff0c;最后一个节点的指针域指向null&#xff08;空指针的意思&a…

金融风控建模常用指标介绍(WOE, IV, KS, PSI)

金融风控建模常用指标介绍&#xff08;WOE, IV, KS, PSI&#xff09; 近期在做金融风控相关项目&#xff0c;有必要把特征和模型的衡量指标总结下&#xff0c;以备不时之需。这次主要介绍4个指标&#xff08;WOE, IV, KS, PSI&#xff09;。 WOE&#xff08;Weight of Evidenc…

力扣-228.汇总区间

AC Code 自己做出来的&#xff0c;代码写的很烂&#xff0c;但是也浅浅记录一下叭&#xff0c;下面有看答案思路写出来的双指针代码 class Solution { public:vector<string> summaryRanges(vector<int>& nums) {vector<string> ans;int n nums.size();…

上市公司-供应链数字化示范名单匹配(2000-2022年)

参考《经济管理》刘海建&#xff08;2023&#xff09;、《中国软科学》张树山&#xff08;2021&#xff09;的做法&#xff0c;将商务部公开的“供应链创新与应用试点企业、试点城市”分别与上市公司匹配&#xff0c;得到2份DID数据 一、数据介绍 数据名称&#xff1a;上市公司…

FPGA:卷积编码及维特比译码仿真

FPGA&#xff1a;卷积编码及维特比译码仿真 本篇记录一下在FPGA中完成卷积编码和维特比译码的过程&#xff0c;通过代码解释编码的过程和译码的过程&#xff0c;便于理解&#xff0c;同时也方便移植到其他工程中。 1. 准备工作 卷积编译码IP核—convolutionIP核和viterbiIP核…

工作流 Flowable 的使用

一、BPMN 业务流程建模与标注 通过 Status&#xff08;状态&#xff09; 字段维护流程状态&#xff0c;流程负责的审批人可能也是 Hard Code&#xff08;硬编码&#xff09;会出现以下问题&#xff1a; 1.流程健壮性差&#xff0c;但凡出现人员变动&#xff0c;或者组织结构调…

Linux部署项目

本文以人人权限管理系统为例&#xff0c;使用finalshell工具连接服务器。服务器使用的是腾讯云服务器。用自己虚拟机也可以完成项目部署。 后端代码renren-security: 采用SpringBoot2、MyBatis-Plus、Shiro框架&#xff0c;开发的一套权限系统&#xff0c;极低门槛&#xff0c…