vue-quill-editor編輯器修改默認字體大小

vue-quill-editor字體數(shù)量特別少唐础,所以根本不能滿足囤捻。

image.png

在對應(yīng)的組件中使用
···
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: "請編輯文本內(nèi)容",
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';
}
/**設(shè)置默認字體顯示
**/
.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
    http://www.reibang.com/p/2c2c54acf1b9配置上傳地址
    -->
    <!-- bidirectional data binding(雙向數(shù)據(jù)綁定)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="請輸入內(nèi)容"
        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: {
        // 編輯器不自動被內(nèi)容撐高
        autoHeightEnabled: false,
        // 初始容器高度
        initialFrameHeight: "100%",
        // 初始容器寬度
        initialFrameWidth: "86%",
        // serverUrl: "http://192.168.9.190:8001/b/upload/uploadImages",
        serverUrl: img_url,
        // UEditor 資源文件的存放路徑压状,如果你使用的是 vue-cli 生成的項目仆抵,通常不需要設(shè)置該選項,vue-ueditor-wrap 會自動處理常見的情況种冬,如果需要特殊配置镣丑,參考下方的常見問題2
        UEDITOR_HOME_URL: "/static/UEditor/"
      },
      editorOption: {
        placeholder: "請編輯文本內(nèi)容",
        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("編輯內(nèi)容改變!", quill, this.content);
      this.$emit("editorBlur", this.content);
    },

    /**
     * 圖片上傳
     */
    // 上傳圖片前
    beforeUpload(res, file) {
      this.quillUpdateImg = true;
    },
    // 上傳圖片成功
    uploadSuccess(res, file) {
      // res為圖片服務(wù)器返回的數(shù)據(jù)
      // 獲取富文本組件實例
      let quill = this.$refs.myQuillEditor.quill;
      // 如果上傳成功
      if (res.ret == "OK") {
        // 獲取光標所在位置
        let length = quill.getSelection().index;
        // 插入圖片  res.info為服務(wù)器返回的圖片地址
        const img = "<img width='80%' style='2px solid red;' src='" + res.content.img_url + "'/>";
        quill.insertEmbed(length, "image", res.content.img_url);
        // 調(diào)整光標到最后
        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>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宵呛,隨后出現(xiàn)的幾起案子单匣,更是在濱河造成了極大的恐慌,老刑警劉巖宝穗,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件封孙,死亡現(xiàn)場離奇詭異,居然都是意外死亡讽营,警方通過查閱死者的電腦和手機虎忌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來橱鹏,“玉大人膜蠢,你說我怎么就攤上這事±蚶迹” “怎么了挑围?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長糖荒。 經(jīng)常有香客問我杉辙,道長,這世上最難降的妖魔是什么捶朵? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任蜘矢,我火速辦了婚禮狂男,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘品腹。我一直安慰自己岖食,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布舞吭。 她就那樣靜靜地躺著泡垃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪羡鸥。 梳的紋絲不亂的頭發(fā)上蔑穴,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音惧浴,去河邊找鬼澎剥。 笑死,一個胖子當著我的面吹牛赶舆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祭饭,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼芜茵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了倡蝙?” 一聲冷哼從身側(cè)響起九串,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寺鸥,沒想到半個月后胆建,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扑馁,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡雄家,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了篡腌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡萌腿,死狀恐怖米死,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布较屿,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏辉川。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一乓旗、第九天 我趴在偏房一處隱蔽的房頂上張望府蛇。 院中可真熱鬧,春花似錦屿愚、人聲如沸汇跨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽穷遂。三九已至,卻和暖如春娱据,著一層夾襖步出監(jiān)牢的瞬間蚪黑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工中剩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忌穿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓结啼,卻偏偏與公主長得像掠剑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子妆棒,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容