quill这个富文本,它把图片转化为base64格式的字符串,然后编辑的内容可以用html代码的格式输出,如果这样的图片处理方式符合理想,那这个编辑器感觉简直完美。可惜我这边需要对图片进行大小检测以及从文本中分离存储。
我是在vue项目中使用的,根据官网先install
npm install vue-quill-editor --save
然后在组件中进行引入,这样之间使用quillEditor就能实现基本的功能了
// 引入样式
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
//引入组件,可以直接使用这个组件
import { quillEditor } from 'vue-quill-editor'
export default {
components: {
quillEditor
}
}
template代码如下,其中绑定的content就是编辑框内容的html代码
通过以上方式,发现虽然能够基本使用它的功能,但是我需要制定自己的图片处理方法,不得已采用另外的方式
PS:上面的使用方式不确定有没有自定义图片处理功能的方法,因为我找不到编辑框对象(下面将提到的quill)。如果能找到这个对象,应该是可以自定义的。
新的方式为,根据quill的中文文档,使用一个DOM作为编辑器的挂载点,自己调用初始化方法
通过以下代码手动初始化,至此完成了编辑器的安装引入
let quill = new Quill("#qu", config); //quill就是编辑器对象,后续自定义操作都需要通过它
quill本身提供了可以自定义工具栏的方法,通过传入config对象实现,相关配置如下。
editorOption: {
theme: "snow",
placeholder: "请在这里输入",
modules: {
toolbar: [
["bold", "italic", "underline", "strike"], //加粗,斜体,下划线,删除线
["blockquote", "code-block"], //引用,代码块
[{ header: 1 }, { header: 2 }], // 标题,键值对的形式;1、2表示字体大小
[{ list: "ordered" }, { list: "bullet" }], //列表
[{ script: "sub" }, { script: "super" }], // 上下标
[{ indent: "-1" }, { indent: "+1" }], // 缩进
[{ direction: "rtl" }], // 文本方向
[{ size: ["small", false, "large", "huge"] }], // 字体大小
[{ header: [1, 2, 3, 4, 5, 6, false] }], //几级标题
[{ color: [] }, { background: [] }], // 字体颜色,字体背景颜色
[{ font: [] }], //字体
[{ align: [] }], //对齐方式
["clean"], //清除字体样式
["image","video"] //上传图片、上传视频
]
}
}
此外,工具栏的按钮文本默认是英文的,通过审查元素发现文本都是通过css来定义的,因此修改css样式即可将工具栏汉化,相关的CSS代码如下:
.editor {
line-height: normal !important;
height: 800px;
}
.ql-snow .ql-tooltip[data-mode=link]::before {
content: "请输入链接地址:";
}
.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
border-right: 0px;
content: '保存';
padding-right: 0px;
}
.ql-snow .ql-tooltip[data-mode=video]::before {
content: "请输入视频地址:";
}
.ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::before {
content: '14px';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
content: '10px';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
content: '18px';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
content: '32px';
}
.ql-snow .ql-picker.ql-header .ql-picker-label::before,
.ql-snow .ql-picker.ql-header .ql-picker-item::before {
content: '文本';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
content: '标题1';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
content: '标题2';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
content: '标题3';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
content: '标题4';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
content: '标题5';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
content: '标题6';
}
.ql-snow .ql-picker.ql-font .ql-picker-label::before,
.ql-snow .ql-picker.ql-font .ql-picker-item::before {
content: '标准字体';
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
content: '衬线字体';
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
content: '等宽字体';
}
.ql-align-center{
text-align: center;
}
.ql-align-right{
text-align: right;
}
.ql-align-left{
text-align: left;
}
以上css代码来自于https://blog.csdn.net/qq_42817227/article/details/88524528
更改使用的方法就是为了拿到编辑器对象quill。查阅了网上大家的方法,发现主要思路就是修改quill本身的点击图片按钮时的回调函数,在新的回调函数里面做自己想要的操作。相关代码如下:
到这里完成了对图片处理方式的修改。