最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue?quill-editor?編輯器使用及自定義toobar示例詳解

 更新時(shí)間:2023年07月21日 11:45:57   作者:海的天空1661  
這篇文章主要介紹了Vue quill-editor編輯器使用及自定義toobar示例詳解,這里講解編輯器quil-editor的知識(shí)結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

vue使用編輯器,這里講解編輯器quil-editor

官網(wǎng):https://quilljs.com/docs/modules/toolbar

1:安裝quill-eidtor

npm i quill@1.3.6 --save

2:創(chuàng)建一個(gè)頁(yè)面,再template里寫入

<template>
  <div class="quill-editor-box" :class="{ 'h-min-40': height === 40 }">
    <div ref="myQuillEditor" :style="style" class="quill-editor">
      <!--這個(gè)是輸入的各種按鈕,現(xiàn)在是簡(jiǎn)單實(shí)用,自定義的看后面-->
      <slot name="toolbar"></slot>
      <!--這個(gè)是編輯器-->
      <div ref="editor"></div> 
    </div>
  </div>
</template>

在script中引入依賴 及quill的toobar的各種按鈕的簡(jiǎn)單配置

<script>
// 主庫(kù)
import _Quill from "quill";
// 核心庫(kù),不包含主題、格式化及非必要模塊
import "quill/dist/quill.core.css";
// 主題樣式表
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";
import katex from "katex";
import { lineHeightStyle } from "@/js/style.js";
export default {
  data() {
    return {
      quill: null,  //這個(gè)是ref指定quill
      editorIndex: 0,
      editorOption: {
        theme: "snow",  //這是是snow模式,一共兩個(gè)模式,snow模式是有toobar的,另一個(gè)模式是沒(méi)有的,只有編輯框quill
        modules: {
          toolbar: [ // 這里是tootbar樣式
            // 加粗 、斜體、底部橫線、中間橫線
            ["bold", "italic", "underline", "strike"], 
            // 引號(hào) 、 插入代碼
            ["blockquote", "code-block"], 
            // 有序列表、 無(wú)序列表
            [{ list: "ordered" }, { list: "bullet" }],
            // 字體:這里可以寫一些字體,也可以自定義引入
            [{ 'font': ['SimSun', 'SimHei','Microsoft-YaHei','KaiTi','FangSong','Arial'] }],
            // 大小
            [{ size: ["12px","14px",false,"18px","20px","22px","24px","26px","28px","30px","32px","34px","36px"] }],
            // 標(biāo)題
            [{ header: [1, 2, 3, 4, 5, 6, false] }],
            // 字體顏色 、 背景顏色
            [{ color: [] }, { background: [] }],
            // 排列方式
            [{ align: [] }],
            // 下標(biāo)、 上標(biāo)
            [{ 'script': 'sub' }, { 'script': 'super' }],
            // 縮進(jìn)
            [{ 'indent': '-1' }, { 'indent': '+1' }],
            // 方向
            [{ 'direction': 'rtl' }],
            // 行高 可自定義
            [{ lineHeight: lineHeightStyle.whitelist }],
            // 清除樣式
            ["clean"],
            ["link", "video", "image"],
          ], 
          formula: this.formula(),
        },
        placeholder: "請(qǐng)輸入內(nèi)容...",
        readOnly: false,
      },
    };
  },
  mounted() {
    this.init();
  },
  methods: {
    init() {
      // 獲取quill,在這里做一些自定義處理
      this.quill = new _Quill(this.$refs["myQuillEditor"], this.editorOption);
      //禁用編輯器,防止頁(yè)面自動(dòng)滾動(dòng)到編輯器位置
      this.quill.enable(false);
      // 初始值
      this.quill.pasteHTML(this.value || "");
      this.$nextTick(function () {
        //丟掉編輯器焦點(diǎn)并重新啟用編輯器
        this.quill.blur();
        this.quill.enable(true);
      });
      // 自定義imageHandler 對(duì)圖片按鈕添加的自定義方法
      this.quill.getModule("toolbar").addHandler("image", () => {
        this.showUploadImage = true;
      });
      //  自定義插入視頻 對(duì)視頻按鈕添加的自定義方法
      this.quill.getModule("toolbar").addHandler("video", () => {
        this.dialogFormVisible = true;
      });
      // 監(jiān)聽(tīng)記錄Index
      this.quill.on("selection-change", (range, oldRange) => {
        if (oldRange === null || oldRange.index === 0) {
          this.editorIndex = this.quill.getLength();
        } else {
          this.editorIndex = oldRange.index;
        }
      });
      // 值變化
      this.quill.on(
        "text-change",
        debounce(() => {
          let html = this.$refs.myQuillEditor.children[0].innerHTML;
          if (html === "<p><br></p>") {
            html = "";
          }
          this.onEditorChange(html);
        }, 400)
      );
    },
    onEditorChange(val) {
      this.$emit("inputvalue", val);
    },
    confirm() {
      this.quill.focus();
      if (!/^<iframe.+<\/iframe>$/.test(this.form.videoIframe)) {
        this.form.videoIframe = "";
        return;
      }
      var range = this.quill.getSelection();
      if (range) {
        //  在當(dāng)前光標(biāo)位置插入圖片
        this.quill
          .getModule("toolbar")
          .quill.clipboard.dangerouslyPasteHTML(
            range.index,
            this.form.videoIframe
          );
        //  將光標(biāo)移動(dòng)到圖片后面
        this.quill.getModule("toolbar").quill.setSelection(range.index + 1);
      }
      this.form.videoIframe = "";
      this.dialogFormVisible = false;
    },
    uploadImage(imgUrl) {
      let index = this.editorIndex;
      let nextIndex = this.editorIndex + 1;
      let html = this.$refs.myQuillEditor.children[0].innerHTML;
      if (html === "<p><br></p>") {
        index = 0;
        nextIndex = 1;
      }
      this.quill.insertEmbed(index, "image", imgUrl);
      this.quill.getModule("toolbar").quill.setSelection(nextIndex);
      this.showUploadImage = false;
    },
  },
};
</script>

上面這是簡(jiǎn)潔版,直接可以寫出一個(gè)帶有多種按鈕操作的編輯器。

效果如下

 3:自定義toobar中各個(gè)小標(biāo)簽

除了可以對(duì)原來(lái)的小button設(shè)置顏色,還可以對(duì)原來(lái)的添加文字描述,并且還可以有長(zhǎng)期hover后的彈框提示。

在template中原來(lái)toobar的地方換成標(biāo)簽

<template>
    <div class="quill-editor-box" :class="{ 'h-min-40': height === 40 }">
        <div ref="myQuillEditor" :style="style" class="quill-editor">
            <!-- <slot name="toolbar"></slot> -->
            <div id="toolbar" style="background-color: white;">
                <span class="ql-formats" >
    <!-- 這里clas都是上面toobar中l(wèi)ist中的寫的前面再加一個(gè)ql-這個(gè)  -->
                    <button class="ql-bold"></button>
                    <button id="so">加粗</button>
                    <button class="ql-italic"></button>
                    <button class="ql-underline"></button>
                    <button class="ql-strike"></button>
                    <!-- spsdf -->
                </span>
                <span class="ql-formats">
                    <!-- <button class="ql-header" value="1"></button>
                        <button class="ql-header" value="2"></button> -->
                    <button class="ql-blockquote"></button>
   <!-- 這里是我添加的文字,自定義,嘗試過(guò)用span用div,并不能把布局弄的很好,相反會(huì)挺糟糕。 -->
                    <button id="so">引號(hào)</button>
                    <button class="ql-code-block"></button>
                </span>
                <span class="ql-formats" id="fom2">
                    <button class="ql-list" value="ordered"></button>
                    <button class="ql-list" value="bullet"></button>
   <!-- 這里是我添加的文字,自定義,嘗試過(guò)用span用div,并不能把布局弄的很好,相反會(huì)挺糟糕。 -->
                    <button id="so">列表</button>
                </span>
                <span class="ql-formats">
                    <select class="ql-font">
                        <option value="SimSun"></option>
                        <option value="SimHei"></option>
                        <option value="Microsoft-YaHei"></option>
                        <option value="KaiTi"></option>
                        <option value="FangSong"></option>
                        <option value="Arial"></option>
                    </select>
   <!-- 這里是我添加的文字,自定義,嘗試過(guò)用span用div,并不能把布局弄的很好,相反會(huì)挺糟糕。 -->
                    <button id="so">字體</button>
                    <select class="ql-size">
                        <option value="12px"></option>
                        <option value="14px"></option>
                        <option selected></option>
                        <option value="18px"></option>
                        <option value="20px"></option>
                        <option value="22px"></option>
                        <option value="24px"></option>
                        <option value="26px"></option>
                        <option value="28px"></option>
                        <option value="30px"></option>
                        <option value="32px"></option>
                        <option value="34px"></option>
                        <option value="36px"></option>
                    </select>
                </span>
                <span class="ql-formats">
                    <select class="ql-header">
                        <option value="1"></option>
                        <option value="2"></option>
                        <option value="3"></option>
                        <option value="4"></option>
                        <option value="5"></option>
                        <option value="6"></option>
                        <option value="7" selected></option>
                    </select>
                </span>
                <span class="ql-formats">
                    <select class="ql-color"></select>
                    <button id="so">顏色</button>
                    <select class="ql-background"></select>
                </span>
                <span class="ql-formats">
                    <select class="ql-align"></select>
                </span>
                <span class="ql-formats">
                    <button class="ql-script" value="sub"></button>
                    <button id="so">下標(biāo)</button>
                    <button class="ql-script" value="super"></button>
                </span>
                <span class="ql-formats">
                    <button class="ql-indent" value="-1"></button>
                    <button class="ql-indent" value="+1"></button>
                </span>
                <span class="ql-formats">
                    <button class="ql-direction" value="rtl" title="設(shè)置方向"></button>
                </span>
                <span class="ql-formats">
                    <select class="ql-lineHeight" title="行高">
                        <option value="1" selected></option>
                        <option value="1.5"></option>
                        <option value="2"></option>
                        <option value="2.5"></option>
                        <option value="3"></option>
                        <option value="3.5"></option>
                        <option value="4"></option>
                        <option value="4.5"></option>
                    </select>
                </span>
                <span class="ql-formats">
                    <button class="ql-link"></button>
                    <button class="ql-video"></button>
                    <button class="ql-image"></button>
                    <!-- <button class="ql-formula"></button> -->
                </span>
                <span class="ql-formats">
                    <button class="ql-clean"></button>
                </span>
                <span class="ql-formats">
         <!-- title是長(zhǎng)期hover后彈出的彈框提示 -->
           <button id="custom-img" title="設(shè)置背景" @click="setImg"></button>
                </span>
            </div>
            <div class="editor" ref="editor" style="height: 380px; background-color: white;  "></div>
        </div>
    </div>
</template>

而script中需要改成這樣

export default {
    data() {
        return {
            quill: null,
            editorIndex: 0,
            editorOption: {
                theme: "snow",
                modules: {
                    // toolbar: this.toolbar(),
                    toolbar: '#toolbar',
                },
                placeholder: "請(qǐng)輸入內(nèi)容...",
                readOnly: false,
            },
        };
    },

css

<style lang="less" scoped>
.ql-formats {
    margin-top: 10px;
    margin-bottom: 20px;
    position: relative;
}
#so {
    position: absolute;
    top: 17px;
    padding: 0px;
    // left:50%-30px;
    left:2px;
    font-size: 11px;
    color:red;
}
</style>

樣式如下

原三方按鈕的顏色修改,添加提示文字(顏色和位置可以修改),添加自定義按鈕(最后一個(gè)就是),長(zhǎng)期hoverbutton后出現(xiàn)的彈框文字提示。

 總:寫的時(shí)候會(huì)遇到很多問(wèn)題,尤其是自定義的時(shí)候

到此這篇關(guān)于Vue quill-editor 編輯器使用及自定義toobar示例詳解的文章就介紹到這了,更多相關(guān)vue quill-editor 編輯器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue el使用el-checkbox-group復(fù)選框進(jìn)行單選框方式

    Vue el使用el-checkbox-group復(fù)選框進(jìn)行單選框方式

    這篇文章主要介紹了Vue el使用el-checkbox-group復(fù)選框進(jìn)行單選框方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue如何實(shí)現(xiàn)本項(xiàng)目頁(yè)面之間跳轉(zhuǎn)

    vue如何實(shí)現(xiàn)本項(xiàng)目頁(yè)面之間跳轉(zhuǎn)

    這篇文章主要介紹了vue如何實(shí)現(xiàn)本項(xiàng)目頁(yè)面之間跳轉(zhuǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue打包更新packge.json版本號(hào)的全過(guò)程

    vue打包更新packge.json版本號(hào)的全過(guò)程

    這篇文章主要介紹了vue打包更新packge.json版本號(hào)的全過(guò)程,文章通過(guò)圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-08-08
  • vue的hash值原理也是table切換實(shí)例代碼

    vue的hash值原理也是table切換實(shí)例代碼

    這篇文章主要介紹了vue的hash值原理也是table切換,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • vue,angular,avalon這三種MVVM框架優(yōu)缺點(diǎn)

    vue,angular,avalon這三種MVVM框架優(yōu)缺點(diǎn)

    本文給大家具體分析了下vue,angular,avalon這三種MVVM框架優(yōu)缺點(diǎn),十分的細(xì)致全面,有需要的小伙伴可以參考下
    2016-04-04
  • $router.push()中通過(guò)path跳轉(zhuǎn)和通過(guò)name跳轉(zhuǎn)區(qū)別解析

    $router.push()中通過(guò)path跳轉(zhuǎn)和通過(guò)name跳轉(zhuǎn)區(qū)別解析

    今天在路由跳轉(zhuǎn)傳參時(shí)發(fā)現(xiàn)params傳參接收到的總是為空,才發(fā)現(xiàn)通過(guò)path和name傳參是有區(qū)別的,這篇文章主要介紹了$router.push()中通過(guò)path跳轉(zhuǎn)和通過(guò)name跳轉(zhuǎn)有什么區(qū)別,需要的朋友可以參考下
    2023-11-11
  • Vite中Terser插件基本使用指南

    Vite中Terser插件基本使用指南

    在Vite中使用Terser插件可以對(duì)JavaScript代碼進(jìn)行壓縮和混淆處理,本文就來(lái)詳細(xì)的介紹一下Terser插件的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-10-10
  • Vue如何下載本地靜態(tài)資源static文件夾

    Vue如何下載本地靜態(tài)資源static文件夾

    這篇文章主要介紹了Vue如何下載本地靜態(tài)資源static文件夾,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue圖片壓縮與批量上傳方式

    vue圖片壓縮與批量上傳方式

    文章介紹了使用Vue和Element UI的el-upload組件實(shí)現(xiàn)圖片的批量上傳和壓縮功能,前端需引入image-conversion庫(kù)并設(shè)置相關(guān)屬性,關(guān)閉自動(dòng)上傳,通過(guò)on-change事件校驗(yàn)文件名和大小,并增加一個(gè)提交到服務(wù)器的按鈕
    2025-01-01
  • ant design Vue 純前端實(shí)現(xiàn)分頁(yè)問(wèn)題

    ant design Vue 純前端實(shí)現(xiàn)分頁(yè)問(wèn)題

    這篇文章主要介紹了ant design Vue 純前端實(shí)現(xiàn)分頁(yè)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評(píng)論

吉木萨尔县| 南皮县| 靖远县| 徐汇区| 蕉岭县| 南澳县| 新邵县| 扶余县| 荥经县| 庄浪县| 修水县| 贵阳市| 林芝县| 油尖旺区| 万安县| 威信县| 上思县| 沙洋县| 上栗县| 中阳县| 达孜县| 利川市| 涿州市| 广州市| 巴里| 彭山县| 海安县| 简阳市| 大同县| 揭东县| 伊通| 左云县| 长汀县| 洞头县| 乡城县| 鄂托克旗| 子洲县| 嵊泗县| 龙南县| 云霄县| 霞浦县|