下载编辑器
到Github下载 Simple-editor 最新版 https://github.com/lofreer/simple-editor
创建demo文件
解压下载的包,在解压后的目录创建 demo.html 文件,填入下面的html代码
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>Simple-editor demo</title>
<!-- css样式文件,webpack加载可忽略 -->
<link rel="stylesheet" href="./lib/css/editor.min.css">
</head>
<body>
<!-- 加载编辑器的容器 -->
<div id="container">
这里写你的初始化内容
</div>
<!-- 编辑器源码文件 -->
<script type="text/javascript" src="lib/js/editor.min.js"></script>
<!-- 实例化编辑器 -->
<script type="text/javascript">
var editor = Edit.getEditor('container', {
... // 配置参数
});
</script>
</body>
</html>
Demo展示
初始化内容
配置项
在实例化时传入配置参数
<script type="text/javascript">
var editor = Edit.getEditor('container', {
initialContent: '初始化内容', // 优先级大于容器标签内的填充
resize: true, // 编辑框是否可拖放
serverUrl: 'http://api.lofreer.com/upload' // 服务器端资源文件的上传地址
toolbars: ['code', '|', 'bold', 'italic'], // 配置工具栏
lang: Edit.langs['zh-ch'] // 语言设置
});
</script>
插件开发
考虑到大家的功能基本上都会扩展一个UI和这个UI做的事情,所以Simple-ditor提供了registerUI这个接口,可以让开发者动态的注入扩展的内容。
<script type="text/javascript">
Edit.registerUI('uiname', function(editor, uiname){
// do something
});
</script>
1. uiname,是你为新添加的UI起的名字
2. function,是实际你要做的事情,这里提供两个参数,editor是编辑器实例,如果你有多个编辑器实例,那每个编辑器实例化后,都会调用这个function,并且把editor传进来,uiname,你为ui起的名字,如果前边你添加的是多个的化,这里function会被调用多次,并且将每一个ui名字传递进来.如果函数返回了一个UI 实例,那这个UI实例就会被默认加到工具栏上。当然也可以不返回任何UI。比如希望监控selectionchange事件,在某些场景下弹出浮层,这时就不需要返回任何UI。
添加按钮
添加一个按钮
<script type="text/javascript">
Edit.registerUI('button', function(editor, uiName) {
//注册按钮名称对应的command命令
editor.registerCommand(uiName, {
execCommand: function() {
alert('execCommand:' + uiName)
}
});
//创建一个button
var btn = new UE.ui.Button({
//按钮的名字
name: uiName,
//提示
title: uiName,
//添加额外样式
stlyle: 'background-image:ulr(xxx.png);background-position: -500px 0;',
//事件对象
handles: {
click: function() {
// 这里可以不用执行命令,做自己的操作也可
editor.execCommand(uiName);
}
}
});
//当点到编辑内容上时,按钮要做的状态反射
editor.addListener('selectionchange', function() {
var state = editor.queryCommandState(uiName);
if (state == -1) {
btn.setDisabled(true);
btn.setChecked(false);
} else {
btn.setDisabled(false);
btn.setChecked(state);
}
});
//因为添加的是button,所以需要返回这个button
return btn;
});
</script>
基本使用
var editor = Edit.getEditor('editor1', {
resize: true, // 编辑区域是否可缩放
toolbars: ['code', '|', 'bold', 'italic', 'underline'], // 菜单栏配置
serverUrl: 'http://api.xxx.com/upload.do', // 文件上传API
fontnames: ['宋体', '黑体', 'Impact'], // 文字名称
colors: {title:value, '黑色':'#000'}, // 色值
fontsizes: {title:value, '12px':1}, // 字体大小
headings: {title:value, '标题1':'h1'}, // 标题
lang: {quotes:'引用', fontname:'字体'} // 语言: Edit.langs: {'zh-ch':{}, 'xxx': {}}
});
editor.addListener('click', function(ev){ // 监听点击事件
console.log(ev) // Events obj
console.log(this) // editor obj
alert('click')
});
editor.setContent('<p>5555</p>', true) // 设置编辑器内容 arguments[1] ? 追加 : 重置
var contentHtml = editor.getContent(); // 获取html内容
var contentTxt = editor.getContentTxt(); // 获取纯文本内容
方法列表
ready(Function fn) 编辑器对外提供的监听ready事件的接口, 通过调用该方法,达到的效果与监听ready事件是一致的
destroy() 销毁编辑器实例
getContent() 获取编辑器的内容
getContentTxt() 获取编辑器中的纯文本内容,没有段落格式
setContent(String html, Boolean isAppendTo) 设置编辑器的内容,可修改编辑器当前的html内容
focus() 让编辑器获得焦点
事件列表
addListener(String types, Function fn) / on() 注册事件监听器
removeListener(String types, Function fn) / off() 移除事件监听器
emit(String types) 触发事件
ready 编辑器准备就绪后会触发该事件
selectionchange 每当编辑器内部选区发生改变时,将触发该事件
contentchange 编辑器内容发生改变时会触发该事件
Toolbar列表
code: '源码',
bold: '粗体',
italic: '斜体',
underline: '下划线',
strikethrough: '删除线',
forecolor: '文字颜色',
backcolor: '背景色',
removeformat: '清除格式',
quotes: '引用',
fontname: '字体',
fontsize: '字号',
heading: '标题',
indent: '缩进',
outdent: '取消缩进',
insertorderedlist: '有序列表',
insertunorderedlist: '无序列表',
justifyleft: '左对齐',
justifycenter: '居中对齐',
justifyright: '右对齐',
justifyfull: '两端对齐',
createlink: '创建链接',
insertimage: '插入图片',
insertvideo: '插入视频',
insertcode: '插入代码'