富文字編輯器是開發中不可或缺的,過去幾年自己也嘗試過很多種不同的編輯器,比如:
以上就不詳細介紹了,其中個人還是比較喜歡 Redactor 的: 簡單清晰, UI 好看,功能全面。
在早期開發中,公司一直使用的是 CKEditor v3 和 v4 版本,後來捨棄之後,就找到了這一款個人認為 史上最NB的編輯器:Froala Editor:
Beautiful Javascript web editor that's easy to integrate for developers and your users will simply fall in love with its clean design.
選擇它的理由:
-
API 和 文件 非常全面,開發者很容易上手。
-
可以自定義主題和外掛,比如控制它的 UI:https://www.froala.com/wysiwyg-editor/customize
- 支援很多的前端框架:VueJS, ReactJS, Angular, Meteor, Ember 等。因為平時會用到 VueJs 和 ReactJs,這2個 NPM 的包很方便:
-
支援 Inline 編輯,可以點選這個連結去試試:https://www.froala.com/wysiwyg-editor/inline
-
網站上提供了大量豐富的例子。
- 內建圖片管理器和圖片編輯器:
- 最後最重要的一點,「程式碼和顏值就像 Laravel 一樣!」Love beautiful code :smile: :laughing:
有興趣的試試,它可以一直免費使用,只不過會顯示需要 license 而已!正式版的價格,unlimited domains 非常非常貴!:sweat:
最後貼一段平時用的 JS config:
$('.froala_editor').froalaEditor({
key: '',
language: 'zh_cn',
height: 500,
// disable quick insert
quickInsertTags: [],
// toolbar buttons
toolbarButtons: ['fullscreen', 'bold', 'italic', 'underline', 'strikeThrough', '|', 'paragraphFormat', 'fontSize', 'color', '|', 'align', 'formatOL', 'formatUL', 'outdent', 'indent', 'quote', '-', 'insertLink', 'insertFile', 'insertImage', 'insertVideo', 'embedly', 'insertTable', '|', 'insertHR', 'selectAll', 'clearFormatting', '|', 'spellChecker', 'help', 'html', '|', 'undo', 'redo'],
// upload file
fileUploadParam: 'file',
fileUploadURL: '/media',
fileUploadMethod: 'POST',
fileMaxSize: 20 * 1024 * 1024,
fileAllowedTypes: ['*'],
// upload image
imageUploadParam: 'file',
imageUploadURL: '/media',
imageUploadMethod: 'POST',
imageMaxSize: 5 * 1024 * 1024,
imageAllowedTypes: ['jpeg', 'jpg', 'png', 'gif', 'bmp', 'svg+xml'],
// upload video
videoUploadParam: 'file',
videoUploadURL: '/media',
videoUploadMethod: 'POST',
videoMaxSize: 50 * 1024 * 1024,
videoAllowedTypes: ['avi', 'mov', 'mp4', 'm4v', 'mpeg', 'mpg', 'wmv', 'ogv'],
}).on('froalaEditor.file.error', function (e, editor, error, response) {
// handle errors
}).on('froalaEditor.image.error', function (e, editor, error, response) {
// handle errors
}).on('froalaEditor.video.error', function (e, editor, error, response) {
// handle errors
});
和一段 ReactJS config:(程式碼並不全,完整的例子需要另一篇文章)
import React from "react";
import FroalaEditor from "react-froala-wysiwyg";
const froala_key = process.env.REACT_APP_FROALA_KEY;
export default function(props) {
let config = {
toolbarButtons: [
"fullscreen",
"bold",
"italic",
"underline",
"strikeThrough",
"|",
"fontSize",
"color",
"paragraphFormat",
"align",
"formatOL",
"formatUL",
"outdent",
"indent",
"quote",
"|",
"insertHR",
"clearFormatting",
"|",
"undo",
"redo"
],
toolbarInline: true,
plugins: [],
quickInsertTags: "",
key: froala_key,
imageInsertButtons: [],
...props
};
return (
<FroalaEditor
config={config}
model={props.text}
onModelChange={props.onTextChange}
style={props.style}
/>
);
}