自定义字体,字号----vue-quill-editor

【富文本-vue-quill-editor】

(一)缺点

1,不容易支持行间距
2,不容易支持表格

(二)优点

1,部分工具的引入支持 class也可支持style引入
2、可扩展性

(三)在vue中的使用

1,安装

npm install vue-quill-editor --save
npm install quill --save

2,使用

import { quillEditor } from "vue-quill-editor"; //调用编辑器

import 'quill/dist/quill.core.css';

import 'quill/dist/quill.snow.css';

import 'quill/dist/quill.bubble.css';

3,注册

components: {
quillEditor
}

(四)支持 字体 字号
1,html部分

<quillEditor
          ref="myTextEditor"
          v-model="content"
          class="editor"
          :options="quillOption"
          @focus="onEditorFocus($event)"
          @change="onEditorChange($event)"
        ></quillEditor>

2,js部分

需要先再app.js中引入字体,字号 等样式

quill.font.scss

$font-family-simsun: 'SimSun';
$font-family-simhei: 'SimHei';
$font-family-kaiti: 'KaiTi';
$font-family-fangsong: 'FangSong';
$font-family-arial: 'Arial';
$font-family-sans-serif: 'sans-serif';

.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="SimSun"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="SimSun"]::before {
  font-family: $font-family-simsun;
  content: "宋体";
}

.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="SimHei"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="SimHei"]::before {
  font-family: $font-family-simhei;
  content: "黑体";
}

.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="Microsoft-YaHei"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="Microsoft-YaHei"]::before {
  font-family: $system-default-font-family;
  content: "微软雅黑";
}

.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="KaiTi"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="KaiTi"]::before {
  font-family: $font-family-kaiti;
  content: "楷体";
}

.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="FangSong"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="FangSong"]::before {
  font-family: $font-family-fangsong;
  content: "仿宋";
}

.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="Arial"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="Arial"]::before {
  font-family: $font-family-arial;
  content: "Arial";
}

.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="sans-serif"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="sans-serif"]::before {
  font-family: $font-family-sans-serif;
  content: "sans-serif";
}

.ql-font-SimSun {
  font-family: $font-family-simsun;
}

.ql-font-SimHei {
  font-family: $font-family-simhei;
}

.ql-font-Microsoft-YaHei {
  font-family: $system-default-font-family;
}

.ql-font-KaiTi {
  font-family: $font-family-kaiti;
}

.ql-font-FangSong {
  font-family: $font-family-fangsong;
}

.ql-font-Arial {
  font-family: $font-family-arial;
}

.ql-font-sans-serif {
  font-family: $font-family-sans-serif;
}

.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='14px']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='14px']::before {
  content: '14px';
}

.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='16px']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='16px']::before {
  content: '16px';
}

.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';
}

.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='24px']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='24px']::before {
  content: '24px';
}

.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='30px']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='30px']::before {
  content: '30px';
}

.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='36px']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='36px']::before {
  content: '36px';
}

app.js中引入

@import '@assets/scss/quill.font.scss';
``



script中引入并注册
``
import { quillEditor, Quill } from 'vue-quill-editor';

let Size = Quill.import('attributors/style/size');
Size.whitelist = ['14px', '16px', '20px', '24px', '30px', '36px'];
Quill.register(Size, true);
// // 自定义字体类型
var fonts = [
  'SimSun',
  'SimHei',
  'Microsoft-YaHei',
  'KaiTi',
  'FangSong',
  'Arial'
];
let Font = Quill.import('attributors/style/font');
Font.whitelist = fonts;
Quill.register(Font, true);

// Quill.import('attributors/style/align')
var aligns = [
  false,
  'SimSun',
  'SimHei',
  'Microsoft-YaHei',
  'KaiTi',
  'FangSong',
  'Arial'
];
let Align = Quill.import('attributors/style/align');
Font.whitelist = aligns;
Quill.register(Align, true);

2,data里面配置工具栏

(register)注册器部分没有使用上,表格相关部分无效(后期在 富文本外实现了表格的可编辑)

quillOption: {
        placeholder: '',
        theme: 'snow', // 主题
        modules: {
          // table:true
          toolbar: {
            container: [
              [
                {
                  size: Size.whitelist
                }
              ], // 字号
              [
                {
                  font: Font.whitelist
                }
              ], // 字体
              [
                {
                  align: Align.whitelist
                }
              ], // 居中
              [
                {
                  indent: '-1'
                },
                {
                  indent: '+1'
                }
              ],
              // [{ 'indent':IndentStyle.whitelist }], // 缩进
              ['bold', 'italic', 'underline', 'strike'],
              // ['blockquote', 'code-block'],
              [
                {
                  header: 1
                },
                {
                  header: 2
                }
              ],
              [
                {
                  list: 'ordered'
                },
                {
                  list: 'bullet'
                }
              ],
              [
                {
                  script: 'sub'
                },
                {
                  script: 'super'
                }
              ],
              [
                {
                  header: [1, 2, 3, 4, 5, 6, false]
                }
              ],
              [
                {
                  color: []
                },
                {
                  background: []
                }
              ],
              [
                // {
                //   table: 'TD'
                // },
                {
                  'table-insert-row': 'TIR'
                },
                {
                  'table-insert-column': 'TIC'
                },
                {
                  'table-delete-row': 'TDR'
                },
                {
                  'table-delete-column': 'TDC'
                }
              ]
            ], // 工具栏选项
            handlers: {
              shadeBox: null,
              // table: function(val) {
              //   // _self.quill.getModule('table').insertTable(2, 2);
              // },
              'table-insert-row': function() {
                // this.quill.getModule('table').insertRowBelow();
                _self.insertRowFn();
              },
              'table-insert-column': function() {
                // this.quill.getModule('table').insertColumnRight();
                _self.insertColFn();
              },
              'table-delete-row': function() {
                _self.deleteRowFn();
              },
              'table-delete-column': function() {
                _self.deleteColFn();
                // this.quill.getModule('table').deleteColumn();
              },
              bold: function(val) {
                document.execCommand('Bold', null, null);
              }
            } // 事件重写
          }
        },
        register(q) {
          // 注册标签(因为在富文本编辑器中是没有div,table等标签的,需要自己去注册自己需要的标签)
          class div extends q.import('blots/block/embed') {}
          class table extends q.import('blots/block/embed') {}
          class tr extends q.import('blots/block/embed') {}
          class td extends q.import('blots/block/embed') {}
          div.blotName = div.tagName = 'div';
          table.blotName = table.tagName = 'table';
          tr.blotName = tr.tagName = 'tr';
          td.blotName = td.tagName = 'td';
          q.register(div);
          q.register(table);
          q.register(tr);
          q.register(td);
        }
      },

3,如果需要在工具栏添加自定义图标,需要自行添加

可以通过class获取,对应class名为ql-工具栏自定义名称

在这里插入图片描述

(五)出现的问题
一直提示表格 注册不上

(六)效果

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue-Quill-Editor 是一个基于 Quill.js 的富文本编辑器组件,支持自定义组件和功能。 以下是一些自定义 Vue-Quill-Editor 的方法: 1. 自定义工具栏 通过在 Vue-Quill-Editor 的 props 中传入 toolbar 属性,可以自定义工具栏,如下所示: ``` <template> <div> <quill-editor v-model="content" :toolbar="toolbarOptions"></quill-editor> </div> </template> <script> export default { data() { return { content: "", toolbarOptions: [ ["bold", "italic", "underline", "strike"], // 加粗,斜体,下划线,删除线 ["blockquote", "code-block"], // 引用,代码块 [ { header: 1 }, { header: 2 } ], // 标题 [ { list: "ordered" }, { list: "bullet" } ], // 列表 [ { script: "sub" }, { script: "super" } ], // 上下标 [ { indent: "-1" }, { indent: "+1" } ], // 缩进 [ { direction: "rtl" } ], // 文本方向 [ { size: ["small", false, "large", "huge"] } ], // 字体大小 [ { color: [] }, { background: [] } ], // 字体颜色,背景颜色 [ { font: [] } ], // 字体 [ { align: [] } ], // 对齐方式 ["clean"] // 清除格式 ] }; } }; </script> ``` 2. 自定义模块 Quill.js 提供了一些默认的模块,如 toolbar、image、video 等,同时也支持自定义模块。你可以通过在 Vue-Quill-Editor 的 props 中传入 modules 属性来实现。 下面是一个自定义图片上传模块的示例: ``` <template> <div> <quill-editor v-model="content" :modules="modules"></quill-editor> </div> </template> <script> export default { data() { return { content: "", modules: { toolbar: [ ["bold", "italic", "underline", "strike"], [{ header: 1 }, { header: 2 }], ["image"] ], image: { upload: file => { // 上传图片的逻辑 return new Promise((resolve, reject) => { const formData = new FormData(); formData.append("image", file); axios .post("/upload/image", formData, { headers: { "Content-Type": "multipart/form-data" } }) .then(res => { resolve(res.data.url); }) .catch(err => { reject(err); }); }); } } } }; } }; </script> ``` 3. 自定义主题 你可以通过重写 Quill.js 的样式来自定义主题,然后在 Vue-Quill-Editor 中使用。 下面是一个自定义主题的示例: ``` <template> <div> <quill-editor v-model="content" :theme="customTheme"></quill-editor> </div> </template> <script> import "./my-quill-theme.css"; export default { data() { return { content: "", customTheme: "my-quill-theme" }; } }; </script> ``` 在 my-quill-theme.css 中定义样式: ``` .ql-container { border: 1px solid #ccc; border-radius: 4px; font-size: 14px; } .ql-editor { padding: 10px; height: 300px; } .ql-editor p { margin: 0; } ``` 通过上述自定义方法,你可以实现 Vue-Quill-Editor 的更多自定义需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值