Quill编辑器介绍及扩展

进入官网. 能找到这个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);

检验一下成果:

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

时间: 2024-08-26 17:48:33

Quill编辑器介绍及扩展的相关文章

02-Python解释器和编辑器介绍

Python解释器和编辑器介绍 解释器 python 这个解释器 是用C语言开发的,也叫 CPython . 在命令行下运行 python 就是启动 CPython解释器. CPython 是使用最广的 Python解释器. 教程的所有代码也都在 CPython 下执行. 除了 cpython 解释器之外,还有 Jpython , IronPython 以及 PyPy . Ipython IPython 是基于 CPython 之上的一个交互式解释器,也就是说,IPython 只是在交互方式上有

6.Java编辑器介绍

Java编辑器很多,有免费的,有收费的,有英文的,中文的,多国语言的,没有哪款比哪款好,只有哪款更适合你,不必为了标新立异而使用别人都不使用的编辑器,建议大家走大众化路线. 目前市面上流行的Java编辑器有Eclipse.MyEclipse.Jcreator.NetBeans等,以下是对几款编辑器的介绍: Eclipse:开源免费,使用人数最多,提供了丰富的插件和友好的编辑界面,能耗也比较低,速度比较快,为Java而生.大公司一般用eclipse. MyEclipse:只是在Eclipse基础上

Unity5.X 编辑器介绍

导航窗口中有一个 Add Asset Package 按钮,可以导入一些官方的资源包,例如Characters角色控制器 Windows → Layouts 可以更换窗口的摆放 常见视图 1.场景视图(Scene View) 用于设置场景以及放置游戏对象,是构造游戏场景的地方 [Ctrl + 1] 2.游戏视图(Game View) 由相机所渲染的游戏画面,游戏发布后的玩家所看到效果[Ctrl + 2] 3.层级视图(Hierarchy) 用于显示当前场景中所有游戏对象的层级关系 [Ctrl +

vs2010(vs2012)好用的扩展插件介绍

一直以来只使用番茄vs助手(https://www.wholetomato.com/downloads/default.asp)辅助写代码,也都忘了是谁介绍的,不过确实好用. 相比原始的vs,它提供了很多改进功能.例如,重命名变量,高亮宏与自定义类型,查找引用,智能代码提示等. 因为一直以来用着没有觉得不爽的地方,所以对于vs的其它插件都没做研究.前段时间因为被外派到了新的项目组,而该项目组要求在云桌面上办公,并且项目组提供的vs2010开发环境不能装vs助手(c盘没有写权限,无法安装).非常不

Eclipse 插件开发 -- 深入理解菜单(Menu)功能及其扩展点( FROM IBM)

Eclipse 插件开发 -- 深入理解菜单(Menu)功能及其扩展点 菜单是各种软件及开发平台会提供的必备功能,Eclipse 也不例外,提供了丰富的菜单,包括主菜单(Main Menu),视图 / 编辑器菜单(ViewPart/Editor Menu)和上下文菜单(Context Menu).在 Eclipse 中,几乎所有的 Workbench Part 提供了人性化的菜单,大大方便了用户的操作.因此,如何扩展 Eclipse 的菜单功能,并实现特定于我们自己插件的菜单,是插件开发者必须掌

属性编辑器,即PropertyEditor-->Spring IoC

在Spring配置文件里,我们往往通过字面值为Bean各种类型的属性提供设置值:不管是double类型还是int类型,在配置文件中都对应字符串类型的字面值.BeanWrapper填充Bean属性时如何将这个字面值转换为对应的double或int等内部类型呢?我们可以隐约地感觉到一定有一个转换器在其中起作用,这个转换器就是属性编辑器. “属性编辑器”这个名字可能会让人误以为是一个带用户界面的输入器,其实属性编辑器不一定非得有用户界面,任何实现java.beans.PropertyEditor接口的

CSDN-markdown扩展语法说明

目录 概述 换行 删除线 链接自动识别 表格 代码块高亮 定义列表 脚注 自动生成目录 参考资料 正文 概述 大部分情况下,Markdown的基本语法已够我们使用,比如随性记录点东西.非专业的分析文章等,一般只用到标题.区块引用.强调.列表这样的基本元素.但若要写专业性比较强的分析文章或技术性文章,这些基本语法就不够用了,因为我们经常会用到表格.脚注.想要自动生成文章目录等,若是涉及代码的技术文章,我们还希望代码支持高亮以提升阅读体验.这就需要用到Markdown的扩展语法了. CSDN-mar

为了让开发者写MaxCompute SQL更爽,DataWorks 增强SQL 编辑器功能

摘要: 众所周知,数据开发和分析的同学每天都要花大量时间写MaxCompute SQL:Dataworks作为数据开发的IDE直接影响着大家的开发效率,这次新上线的Dataworks我们在编辑体验上做了很多工作,在前端实现MaxCompute SQL和编辑器参数等扩展语法的AST解析,并实现更好更智能的代 众所周知,数据开发和分析的同学每天都要花大量时间写MaxCompute SQL:Dataworks作为数据开发的IDE直接影响着大家的开发效率,这次新上线的Dataworks我们在编辑体验上做

商品基本信息\商品介绍

商品录入 课程目标 目标1:完成商品分类功能 目标2:了解电商概念SPU 和SKU 目标3:掌握富文本编辑器的使用 目标4:掌握上传服务器FastDFS 目标5:掌握angularJS图片上传 1.商品分类 1.1需求及表结构分析 1.1.1需求分析 实现三级商品分类列表查询功能 进入页面首先显示所以一级分类,效果如下: 点击列表行的查询下级按钮,进入下级分类列表,同时更新面包屑导航 再次点击表行的查询下级按钮,进入三级分类列表,因为三级分类属于最后一级,所以在列表中不显示查询下级按钮,同时更新