一、简介
CKEditor5是一种适用于现代浏览器的Web富文本编辑器,它是CKEditor的新版本。CKEditor5提供了更现代化的架构以及一个全新的插件化API来使得插件的开发、使用更加自由和方便。下面将从用户体验、API、插件三方面深入解析它的文档。
二、用户体验
CKEditor5在用户体验和编辑功能上都有了很大的改进。其优点有:
1. 现代化的界面:CKEditor5 的设计语言是 Material Design。这使得它的界面看起来更现代化,也更加符合当今 Web 上的设计趋势。
2. 响应更快:CKEditor5 采用了更加现代化的技术栈 —— ES6、Webpack、React、Redux 等等,这使得它的响应速度得到了大大的提升。
3. 更现代化的编辑方式:CKEditor5将文档流和分段段落的概念相结合,使得富文本编辑更加自然,同时,为了高可用性,也支持了纯文本编辑器。
三、API
CKEditor5的API中很多部分都借鉴了React和Redux的设计哲学,更加具有现代化的特征。下面介绍一下CKEditor5的API:
1. 进入编辑区
const editor = document.querySelector( '.editor' );
ClassicEditor
.create( editor )
.then( ... )
.catch( ... );
这符合了现代化的按需加载的设计,当我们需要使用CKEditor5的时候,将JS才动态插入到页面中,从而减少网页的初始加载时间。
2. 编辑器实例的使用
ClassicEditor
.create( document.querySelector( '#editor' ), {
toolbar: [ 'heading', '|', 'bold', 'italic', 'link' ]
} )
.then( editor => {
console.log( editor );
} )
.catch( error => {
console.error( error );
} );
编辑器具有强大的功能,我们可以针对这些功能进行自定义配置,并在使用时进行灵活调用。
3. 包含 DOM 更新监听的编辑器
import { editor } from '@ckeditor/ckeditor5-core';
const canvasEditor = editor({
canvas: document.createElement('canvas')
});
canvasEditor.model.document.on('change', (evt, data) => {
console.log(data, data.writer.getPlainText());
})
CKEditor5提供了很好的DOM节点更新响应机制,当我们需要监听节点变更时,可以使用这样的代码进行监听。
四、插件
CKEditor5 之所以更加强大,其插件化机制功不可没。CKEditor5 的插件可以被 Redux store 式的机制所应用,这让插件的开发变得更加容易和灵活。CKEditor5 自带了很多插件,我们也可以开发自己的插件。下面是一个自定义的插件的代码示例:
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
export default class ImageCaptionEditing extends Plugin {
static get requires() {
return [ ImageCaption, ImageCaptionEditingUI ];
}
init() {
const editor = this.editor;
editor.editing.mapper.on( 'viewToModelPosition', ( viewToModelPositionEvent, data ) => {
if ( data.viewPosition.parent.name === 'image' && data.viewPosition.name === 'caption' ) {
viewToModelPositionEvent.preventDefault();
editor.editing.view.scrollToTheElement( data.viewPosition.parent );
editor.model.focusPosition = editor.model.document.selection.getFirstPosition();
}
} );
}
}
五、总结
以上是对CKEditor5中文文档的探讨和介绍。CKEditor5设计现代化的界面、响应更加快速,在API和插件上也有了很大的改进。同时,它的文档也相对完善,对初学者和资深用户都有很好的帮助和学习价值。我们希望在以后的 Web 开发中能够更加高效地利用这个好用的工具。