从这里进入官网. 能找到这个NB的编辑器是因为公司项目需要一个可视化的cms编辑器,类似微信公众号编辑文章。可以插入各种卡片,模块,问题,图片等等。然后插入的内容还需要能删除,拖拽等等。所以采用vue开发,兼容vue并兼容拖拽的文本编辑器并不多,所以在github上一番搜索找到了quill这款文本编辑器神器。
先从官方例子里面扒一个图瞅瞅:

PS:和大多数文本编辑器长得都差不多,如果功能都一样,那也不用介绍了。 他NB,强大的地方就是所有能看到的,不能看到的功能统统都是一个一个独立的模块。全部都是可以替换的。不得不对这段文字进行重点标记。当然其他编辑器的一些几本功能也统统都有且不仅如此。比如文本的样式,多媒体文件的上传,响应键盘事件,操作历史,公式支持等等。点击查看详情. 各种自定义的使用说明
比如上图中的菜单栏可以自定义,对已有的菜单栏定义:继续从官方例子里面扒图:

当然,如果插件自带的功能没有,比如你要做一个动画在菜单栏上加一个图标、选项或者什么的。可以对整个菜单栏进行定义和重写

下面从项目中的扩展点找2个说明一下这个NB的编辑器,当然他的更多可扩展功能也没有用上,所以只有看到的官方文档,才能理解他的可扩展性和灵活性。

修改字体大小选择,使用自定义的列表和单位(rem)

自带的字体大小编辑有2个如下。但是显然不太能支持我们的用法。一开始吧size扩展成了px。但是后来经过测试发现手机端使用的是rem,so。最后改成使用rem。

[{ 'size': ['small', false, 'large', 'huge'] }]
[{ 'header': [1, 2, 3, 4, 5, 6, false] }],
//扩展后的字体选择
[{// 'size': ['10px', '12px', '14px', '16px', '18px', '20px']//1/75 *2//1px =0.026rem//1rem=36px'size': ['0.26rem', '0.31rem', '0.37rem', '0.41rem', '0.47rem', '0.52rem']}]

为了在菜单栏中显示对应的字体大小。加入css。差不多长这样,有多少个选项,就加多少个。

.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="10px"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="10px"]::before {content: '10px';font-size: 10px;
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="20px"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="20px"]::before {content: '20px';font-size: 20px;
}
//默认的样式
.ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::before {content: '14px';font-size: 14px;
}
//rem:需要说明一下,在编辑的时候还是显示px单位,但最终生成的源代码使用rem,因为编辑是在pc上,并且运营人员也只熟悉px这个单位,对rem没有概念。
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="0.26rem"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="0.26rem"]::before {content: '10px';font-size: 10px;
}

在然后在初始化quill的地方加上下面的js代码

import Quill from 'quill'
var Size = Quill.import('attributors/style/size');
// Size.whitelist = ['10px', '12px', '14px', '16px', '18px', '20px'];Size.whitelist = ['0.26rem', '0.31rem', '0.37rem', '0.41rem', '0.47rem', '0.52rem'];Quill.register(Size, true);

如此之后,对我们字体大小的选择就算扩展完毕了,让我们检验一下成果:

当然为了在pc上rem字体能生效,还必须得加上一行。

html {font-size: 36px;
}

扩展居中,靠右使用样式,而不是class方式

值得说明的是,样式的设置等,几本都有多套策略可以选择。举个栗子,官方源代码。
这是官方的字体方向设置的源代码。我们可以看到他就有3种方式设置:通过attribute(algin:'right'),通过class(class='ql-align-right'),通过style(style='text-align:right');是不是很灵活,很强大,任君选择有木有

import Parchment from 'parchment';let config = {scope: Parchment.Scope.BLOCK,whitelist: ['right', 'center', 'justify']
};let AlignAttribute = new Parchment.Attributor.Attribute('align', 'align', config);
let AlignClass = new Parchment.Attributor.Class('align', 'ql-align', config);
let AlignStyle = new Parchment.Attributor.Style('align', 'text-align', config);export { AlignAttribute, AlignClass, AlignStyle };

那如何指定使用其他的一种呢?像下面的代码一样,如果使用style。则使用 Quill.import('attributors/style/align');替换默认的,如果使用class:则使用 Quill.import('attributors/class/align');

var Align = Quill.import('attributors/style/align');
Align.whitelist = ['right', 'center', 'justify'];
Quill.register(Align, true);

检验一下成果:

然后在来一个高级一点的。设置字体为粗体

quill默认使用的是strong或者b标签方式。其实这也是没有问题的,但是架不住公司的"高级"前端对手机端的所有html标签都reset了。所有的hx标签,em,strong等语义标签全部reset了。所以没办法只能使用style的方式来实现。

import Inline from '../blots/inline';class Bold extends Inline {static create() {return super.create();}static formats() {return true;}optimize() {super.optimize();if (this.domNode.tagName !== this.statics.tagName[0]) {this.replaceWith(this.statics.blotName);}}
}
Bold.blotName = 'bold';
Bold.tagName = ['STRONG', 'B'];export default Bold;

使用style来实现文字的加粗

import Quill from 'quill'
let Parchment = Quill.import('parchment')
class BoldStyleAttributor extends Parchment.Attributor.Style {value(domNode) {let value = super.value(domNode);return value;}add(node, value) {$(node).css('font-weight', 'bold');return true;}remove(node) {$(node).css('font-weight', 'normal');}
}
let BoldStyle = new BoldStyleAttributor('bold', 'font-weight', {scope: Parchment.Scope.INLINE,whitelist: [true, false]
});export default BoldStyle;`

初始化quill的地方加上下面的代码
./NodeEditText/TextBold”或者“./NodeEditText/TextBold.js”就是上面几行代码的js文件路径。

import MyBold from './NodeEditText/TextBold'
Quill.register("formats/bold", MyBold, true);

检验一下成果:

诸如文字的字体啦,斜体啦,都类似写法。就不一一展开了。官方文档虽然是英文的,但是耐着性子看,还是能比较方便看懂的,
写在最后:
能够快速的自定义这个组件的前提是需要懂他的设计思想,我也只是粗浅的了解使用了一下这个组件,就不做什么总结了

回答一下 @48詹泽娟 的问题,集成到vue,大约是这样子.

<template><div id="quillWrapper"><div ref="quillContainer" :id="$data.elmId" class="quill-container"></div><button v-if="useSaveButton" class="save-button"@click="saveContent">{{ buttonText ? buttonText : 'Save Content' }}</button><div v-if="showPreview" ref="livePreview" class="ql-editor"></div></div>
</template><script>import Quill from 'quill'import Parchment from 'parchment';import MyBold from './NodeEditText/TextBold'import MyItalic from './NodeEditText/TextItalic'var defaultToolbar = [['bold', 'italic'],[{'color': []}],[{// 'size': ['10px', '12px', '14px', '16px', '18px', '20px']//1/75 *2//1px =0.026rem//1rem=36px'size': ['0.26rem', '0.31rem', '0.37rem', '0.41rem', '0.47rem', '0.52rem']}],[{'align': []}],['clean'],];export default {name: 'VueEditor',props: {editorContent: String,placeholder: String,buttonText: String,useSaveButton: {type: Boolean,default () {return true}},showPreview: {type: Boolean,default () {return false}}},data: function() {return {quill: null,editor: null,toolbar: defaultToolbar,elmId: 'quill-container' + (new Date()).getTime()}},mounted: function() {const vm = thisvar Size = Quill.import('attributors/style/size');// Size.whitelist = ['10px', '12px', '14px', '16px', '18px', '20px'];Size.whitelist = ['0.26rem', '0.31rem', '0.37rem', '0.41rem', '0.47rem', '0.52rem'];Quill.register(Size, true);var Align = Quill.import('attributors/style/align');Align.whitelist = ['right', 'center', 'justify'];Quill.register(Align, true);// Quill.register(MyBold, true);Quill.register("formats/bold", MyBold, true);Quill.register("formats/italic", MyItalic, true);vm.quill = new Quill(vm.$refs.quillContainer, {modules: {toolbar: {'container': this.toolbar,}},placeholder: this.placeholder ? this.placeholder : '',theme: 'snow'});vm.editor = $(this.$el).find('.ql-editor')[0];vm.editor.innerHTML = this.editorContent;if (vm.$refs.livePreview !== undefined || false) {vm.quill.on('text-change', function() {vm.$refs.livePreview.innerHTML = vm.editor.innerHTMLvm.$emit('editor-updated', vm.editor.innerHTML)});} else {vm.quill.on('text-change', function() {vm.$emit('editor-updated', vm.editor.innerHTML)});}var replaceReg = /<(\S*?) [^>]*>.*?<\/\1>|<.*?\/>/gm;$(vm.editor).on('paste', function(e) {var text = null;if (window.clipboardData && clipboardData.setData) {// IEtext = window.clipboardData.getData('text');} else {text = (e.originalEvent || e).clipboardData.getData('text/plain') || prompt('在这里输入文本');}console.log(text);if (document.body.createTextRange) {if (document.selection) {textRange = document.selection.createRange();} else if (window.getSelection) {sel = window.getSelection();var range = sel.getRangeAt(0);// 创建临时元素,使得TextRange可以移动到正确的位置var tempEl = document.createElement("span");tempEl.innerHTML = "&#FEFF;";range.deleteContents();range.insertNode(tempEl);textRange = document.body.createTextRange();textRange.moveToElementText(tempEl);tempEl.parentNode.removeChild(tempEl);}textRange.text = text;textRange.collapse(false);textRange.select();} else {// Chrome之类浏览器document.execCommand("insertText", false, text);}e.preventDefault();console.log('paste:' + text);});try {document.execCommand("AutoUrlDetect", false, false);} catch (e) {}},watch: {editorContent: function() {if (this.editor.innerHTML != this.editorContent) {console.log('set inner html');this.editor.innerHTML = this.editorContent;}}},methods: {saveContent: function(value) {this.$emit('save-content', this.editor.innerHTML)}}}
</script>

转载于:https://www.cnblogs.com/calvinK/p/6322512.html

Quill编辑器介绍及扩展相关推荐

  1. 市面上主流编辑器介绍(2021/05/20)

    市面上主流编辑器介绍(2021/05/20) 背景 Markdown是一种有用的轻量级标记语言,后续Markdown简写为md. 富文本编辑器(Rich Text Editor,RTE)是一种可内嵌于 ...

  2. Quill编辑器操作实例详解

    今天分享下"Quill编辑器操作实例详解"这篇文章,文中根据实例编码详细介绍,或许对大家的编程之路有着一定的参考空间与使用价值,需要的朋友接下来跟着云南仟龙Mark一起学习一下吧. ...

  3. vue 富文本 quill 编辑器,实现图片上传到服务器,以及实时字数统计

    vue 富文本 quill 编辑器,实现图片上传到服务器,以及实时字数统计 写在前面 vue 富文本 quill / vue-quill-editor 如何使用 图片上传到服务器 实时字数统计 图片编 ...

  4. Quill编辑器IOS下无法获取焦点的解决方法

    Quill编辑器IOS下无法获取焦点的解决方法 参考文章: (1)Quill编辑器IOS下无法获取焦点的解决方法 (2)https://www.cnblogs.com/slmk/p/8618296.h ...

  5. html5 扩展属性,HTML5属性的介绍和扩展.doc

    HTML5属性的介绍和扩展 HTML5 视频 HTML5 规定了一种通过 video 元素来包含视频的标准方法. 如需在 HTML5 中显示视频,您所有需要的是: 音频 Canvas 一 简单图形整套 ...

  6. markdown编辑器介绍 - 更具表达性的文档格式

    markdown编辑器: 更具表达性的文档格式 文章目录 markdown编辑器: 更具表达性的文档格式 书籍文章截图: 文章参考: 书籍文章截图: 文章参考: 使用文档(下图) 欢迎使用CSDN-m ...

  7. quill光标位置插入html,quill编辑器+word文档上传,插入指定位置

    官方quill没有直接给出插入html的方式 类似,下面两个方法,是quill框架提供的,但是并没有提供可以在指定光标位置插入html quill.pasteHTML:这个方法已经废弃了,但目前还是可 ...

  8. Quill编辑器实现图片上传功能

    我们引入Quill时是可以直接插入图片了,但是是Quill将图片转化成了base64格式,我们如果存数据库的话,肯定不是长久之计,而真正符合我们要求的便是图片上传之后返回图片路径,再插入图片 1.点击 ...

  9. VUE+Quill编辑器实现添加新闻功能

    一个很典型的添加新闻功能,肯定离不了网页编辑器,然后有很多种选择,百度了大概说是quill和vue的兼容性比较好,网上也有很多在用,就跟风选择了! 这是最终效果 实现的过程肯定是有些曲折的,所以给各位 ...

最新文章

  1. 零基础java培训如何规划学习路线
  2. 【PC工具】windows图片文字识别软件,天若OCR文字识别软件
  3. 机器学习的练功心法(三)——特征工程
  4. linux opencl(AMD) Example
  5. android监听方法的耗时时间,Android从网络获取北京时间以及动态的监听时间
  6. 判断一个图是否有环(有向图,无向图)
  7. ubuntu执行configure配置代码出现unable to guess system type报错
  8. NYOJ--891--找点
  9. java并发编程:线程安全管理类--原子操作类--AtomicLongFieldUpdaterT
  10. 【传感器大赏】酒精传感器
  11. 解决MAC OS X不识别Kindle Fire
  12. 微信小程序开发详细步骤解决方案
  13. 用JS解决那些有趣的数学题!
  14. fiddler拦截模拟器中app的请求设置方法
  15. 厦大的计算机博士好考吗,厦大明年博士生招生七成以上不要初试 “考霸”没优势...
  16. Docker-PS基本命令解析
  17. ICC Scenario Difinition(什么是Scenario?)
  18. Calendar设置下一分钟
  19. LaTeX 中插入中英双语目录
  20. Linux系统简介-虚拟机安装教程(保姆级)-Linux常用命令

热门文章

  1. android 桥接,路由器一键桥接Android实现
  2. 王爽《汇编语言》实验1笔记与实验任务
  3. linux虚拟机巨简单版安装VMware Tools CentOS Mr.QIN
  4. 使用Logistic回归预测贷款违约
  5. Node课程(3,2,1,8,3)
  6. Java学习笔记——程序逻辑控制
  7. QuickSearch eXtended配置
  8. Jlink使用技巧系列教程索引
  9. 使用rcedit修改exe文件信息(图标、版本、版权等)
  10. 数百家门店“联营管理” 鞋企瑞贝卡为何看重IMO班聊?