美文网首页
vue-quill-editor编辑器修改默认字体大小

vue-quill-editor编辑器修改默认字体大小

作者: 梧桐芊雨 | 来源:发表于2020-02-03 12:06 被阅读0次

vue-quill-editor字体数量特别少,所以根本不能满足。

image.png

在对应的组件中使用
···
import "../../assets/styles/fontstyle/size-set.css";
import { quillEditor, Quill } from "vue-quill-editor";
let fontSizeStyle = Quill.import('attributors/style/size');
fontSizeStyle.whitelist = ['10px', '12px', '14px', '16px','18px','20px', '22px','24px', '26px', '28px','30px','32px', '36px','38px', '40px','45px', '50px', false];
Quill.register(fontSizeStyle, true);
···
在editor的配置中配置size字体大小
····
editorOption: {
placeholder: "请编辑文本内容",
modules: {
toolbar: {
container: [
["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: fontSizeStyle.whitelist}], // 字体大小  ["small", false, "large", "huge"]
          //[{ size:['10px', false, '12px', '14px', '16px', '18px', '20px', '22px', '24px', '26px', '28px', '30px', '33px', '36px', '40px']}],
          [{ header: [1, 2, 3, 4, 5, 6, false] }], //几级标题

          [{ color: [] }, { background: [] }], // 字体颜色,字体背景颜色
           [{ font: fonts }], //字体
          [{ align: [] }], //对齐方式
          ["image"],["clean"] //上传图片、上传视频 //清除字体样式
        ],
        handlers: {
          image: function(value) {
            if (value) {
              document.querySelector("#quill-upload input").click();
              console.log(
                "图片显示",
                document.querySelector("#quill-upload input")
              );
            } else {

              this.quill.format("image", false);
            }
          }
        }
      }
    },
    theme: "snow"
  }

···

新建size-set.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';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='12px']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='12px']::before {
  content: '12px';
}
.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='18px']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='18px']::before {
  content: '18px';
}
.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='22px']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='22px']::before {
  content: '22px';
}
.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='26px']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='26px']::before {
  content: '26px';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='28px']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='28px']::before {
  content: '28px';
}
.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='32px']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='32px']::before {
  content: '32px';
}
.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';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='38px']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='38px']::before {
  content: '38px';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='40px']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='40px']::before {
  content: '40px';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='45px']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='45px']::before {
  content: '45px';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='50px']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='50px']::before {
  content: '50px';
}
/**设置默认字体显示
**/
.ql-container {
    font-size:16px;
}


<template>
  <div class="Editor">
    <!--百度编辑器显示 https://juejin.im/post/5c931fe8f265da60f771c2cd
    https://juejin.im/post/5a782c946fb9a063475f5e16
    https://www.cnblogs.com/zr123/p/11101429.html
    https://www.jianshu.com/p/2c2c54acf1b9配置上传地址
    -->
    <!-- bidirectional data binding(双向数据绑定)v-if="!isEdit" -->

    <div class="editType">
      <el-upload
        id="quill-upload"
        class="avatar-uploader"
        :action="actionUrl"
        name="img"
        :show-file-list="false"
        :on-success="uploadSuccess"
        :on-error="uploadError"
        :before-upload="beforeUpload"
      ></el-upload>
      <quill-editor
        style="height:300px"
        v-model="content"
        ref="myQuillEditor"
        :options="editorOption"
        @blur="onEditorBlur($event)"
        @focus="onEditorFocus($event)"
        @change="onEditorChange($event)"
        @ready="onEditorReady($event)"
      ></quill-editor>
    </div>

    <!-- <div class="editType" v-if="isEdit">
      <vue-ueditor-wrap
        v-model="content"
        :config="myUeditConfig"
        @blur="editorTxt()"
        :destroy="true"
      ></vue-ueditor-wrap>
    </div>-->

    <!-- <div class="editType">
      <el-input
        type="textarea"
        :autosize="{ minRows: 20, maxRows: 20}"
        placeholder="请输入内容"
        v-model="content"
      >   </el-input>
    </div>
    -->
  </div>
</template>
<script>
import { base_url, img_url } from "../../util/url";
import "../../assets/styles/fontstyle/font.css";
import "../../assets/styles/fontstyle/size-set.css";

import { quillEditor, Quill } from "vue-quill-editor";

let fontSizeStyle = Quill.import('attributors/style/size');
fontSizeStyle.whitelist = ['10px', '12px', '14px', '16px','18px','20px', '22px','24px', '26px', '28px','30px','32px', '36px','38px', '40px','45px', '50px', false];
Quill.register(fontSizeStyle, true);

//自定义字体类型
var fonts = [
  "SimSun",
  "SimHei",
  "Microsoft-YaHei",
  "KaiTi",
  "FangSong",
  "Arial",
  "Times-New-Roman",
  "sans-serif"
];
var Font = Quill.import("formats/font");
Font.whitelist = fonts; //将字体加入到白名单
Quill.register(Font, true);

export default {
  name: "Editor",

  props: {
    isEdit: {
      type: Boolean,
      default: false
    },
    txtcontent: {
      type: String,
      default: ""
    }
  },
  data() {
    return {
      quillUpdateImg: false,
      headerToken: { "X-Auth-Token": localStorage.getItem("accessToken") },
      actionUrl: img_url,
      content: "",
      myUeditConfig: {
        // 编辑器不自动被内容撑高
        autoHeightEnabled: false,
        // 初始容器高度
        initialFrameHeight: "100%",
        // 初始容器宽度
        initialFrameWidth: "86%",
        // serverUrl: "http://192.168.9.190:8001/b/upload/uploadImages",
        serverUrl: img_url,
        // UEditor 资源文件的存放路径,如果你使用的是 vue-cli 生成的项目,通常不需要设置该选项,vue-ueditor-wrap 会自动处理常见的情况,如果需要特殊配置,参考下方的常见问题2
        UEDITOR_HOME_URL: "/static/UEditor/"
      },
      editorOption: {
        placeholder: "请编辑文本内容",
        modules: {
          toolbar: {
            container: [
              ["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: fontSizeStyle.whitelist}], // 字体大小  ["small", false, "large", "huge"]
              //[{ size:['10px', false, '12px', '14px', '16px', '18px', '20px', '22px', '24px', '26px', '28px', '30px', '33px', '36px', '40px']}],
              [{ header: [1, 2, 3, 4, 5, 6, false] }], //几级标题

              [{ color: [] }, { background: [] }], // 字体颜色,字体背景颜色
               [{ font: fonts }], //字体
              [{ align: [] }], //对齐方式
              ["image"],["clean"] //上传图片、上传视频 //清除字体样式
            ],
            handlers: {
              image: function(value) {
                if (value) {
                  document.querySelector("#quill-upload input").click();
                  console.log(
                    "图片显示",
                    document.querySelector("#quill-upload input")
                  );
                } else {

                  this.quill.format("image", false);
                }
              }
            }
          }
        },
        theme: "snow"
      }
    };
  },
  methods: {
    //vue-quill-editor
    onEditorBlur(quill) {
      // console.log("editor blur!", quill, this.content);
      this.$emit("editorBlur", this.content);
    },
    onEditorFocus(quill) {
      this.$emit("editorBlur", this.content);
      // console.log("editor focus!", quill, this.content);
    },
    onEditorReady(quill) {
      // console.log("editor ready!", quill);
    },
    onEditorChange({ quill, html, text }) {
      // console.log("editor change!", quill, html, text);
      this.content = html;
    },
    onEditorChange(quill) {
      // console.log("编辑内容改变!", quill, this.content);
      this.$emit("editorBlur", this.content);
    },

    /**
     * 图片上传
     */
    // 上传图片前
    beforeUpload(res, file) {
      this.quillUpdateImg = true;
    },
    // 上传图片成功
    uploadSuccess(res, file) {
      // res为图片服务器返回的数据
      // 获取富文本组件实例
      let quill = this.$refs.myQuillEditor.quill;
      // 如果上传成功
      if (res.ret == "OK") {
        // 获取光标所在位置
        let length = quill.getSelection().index;
        // 插入图片  res.info为服务器返回的图片地址
        const img = "<img width='80%' style='2px solid red;' src='" + res.content.img_url + "'/>";
        quill.insertEmbed(length, "image", res.content.img_url);
        // 调整光标到最后
        quill.setSelection(length + 1);
      } else {
        console.log("插入失败");
      }
      // loading动画消失
      this.quillUpdateImg = false;
    },
    // 上传图片失败
    uploadError(res, file) {
      // loading动画消失
      this.quillUpdateImg = false;
      console.log("插入失败", res, file);
    }

    //vue

    // editorTxt() {
    //   // console.log("百度插件不行吗", this.content);
    // }
  },
  watch: {
    txtcontent(value, oldValue) {
      this.content = value;
    }
  },

  computed: {
    editor() {
      return this.$refs.myQuillEditor.quill;
    }
  },
  mounted() {
    //  console.log("this is current quill instance object", this.editor);
  },
  activated() {},
  //keep-alive停用时掉用
  deactivated() {}
};
</script>

<style lang="scss" scoped>
@import "../../assets/styles/fontstyle/font_cn.css";
.Editor {
  min-height: 305px;
  height: 100%;
}
.quill-editor {
  height: 300px;
}
</style>

相关文章

网友评论

      本文标题:vue-quill-editor编辑器修改默认字体大小

      本文链接:https://www.haomeiwen.com/subject/ttcfzctx.html