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

vue quill editor 使用富文本添加上傳音頻功能

 更新時間:2020年01月14日 14:05:36   作者:halo1416  
vue-quill-editor 是vue項目中常用的富文本插件,其功能能滿足大部分的項目需求。這篇文章主要介紹了vue-quill-editor 富文本添加上傳音頻功能,需要的朋友可以參考下

1. 前言

vue-quill-editor 是vue項目中常用的富文本插件,其功能能滿足大部分的項目需求。但是,最近項目中,需要在富文本中上傳音頻文件,但是vue-quill-editor這個富文本僅支持圖片,視頻上傳;所以這個功能需要自定義。

怎么實現(xiàn)這個功能?

  • 寫一個只能上傳音頻的組件,并且隱藏
  • 在富文本插件的toolbar定義一個按鈕,點擊時調(diào)用上傳組件
  • 監(jiān)聽上傳成功的回調(diào)函數(shù),在富文本輸入框中插入音頻標簽

2. 功能實現(xiàn)

2.1 基于Element-ui實現(xiàn)上傳組件,并且隱藏(不能讓用戶點擊)

<!-- 
首先,必須隱藏這個元素:display:none;
v-loading.fullscreen.lock:設置上傳時顯示loading,值為true/false;
action:設置上傳的地址;
before-upload:上傳前的鉤子函數(shù),驗證是否為音頻文件;
on-success:上傳成功的鉤子函數(shù);
on-progress:上傳時的鉤子函數(shù),設置顯示loading
 -->
<div style="display:none">
  <el-upload
    v-loading.fullscreen.lock="fullscreenLoading"
    :action="actionUrl"
    :before-upload="beforeUpload"
    :on-success="handleSuccess"
    :on-progress="uploadIng"
  >
  <el-button size="small" class="uploadVoiceBtn" type="primary">upload</el-button>
  </el-upload>
</div>

對應的鉤子函數(shù):

actionUrl:直接根據(jù)后臺接口賦值即可
beforeUpload:驗證是否為音頻

beforeUpload(file){
  // file.type好像只能返回圖片的格式,其他的將會是 "", 所以需要自己獲取后綴名判斷文件格式
  let pointIndex = file.name.lastIndexOf(".");
  let fileType = file.name.substring(pointIndex+1);  //獲取到文件后綴名
  // if (fileType !== 'mp3' && fileType !== 'ogg' && fileType !== 'wav') {
  if (fileType !== 'mp3' && fileType !== 'ogg') {
    this.$message.error('你選擇的文件不是音頻哦,僅支持mp3和ogg格式')
    return false
  }
},

handleSuccess:上傳成功的回調(diào),主要功能實現(xiàn)的地方,后面介紹

uploadIng:設置顯示loading

uploadIng(){    //上傳時顯示loading
  this.fullscreenLoading = true
}

2.2 在富文本插件的toolbar定義一個按鈕,點擊時調(diào)用上傳組件

注意:vue-quill-editor是基于quill富文本的二次封裝(源碼可以很容易看出來),所以需要看配置方法的直接去看quill即可

A. 修改 editorOption 配置,添加一個按鈕:

//富文本設置
editorOption: {
  modules: {
    ...,      //其他配置,如quill-image-extend-module
    toolbar: {
      container: [
        ['bold', 'italic', 'underline', 'strike'],
        [{ 'size': ['small', false, 'large', 'huge'] }],
        [{ 'header': [1, 2, 3, 4, 5, 6, false] }],
        [{ 'color': [] }, { 'background': [] }],
        ['blockquote', 'code-block'],
        ['link', 'image'],
        ['voice']   //新添加的工具
      ],
      handlers: {
        'voice': function(value){   //添加工具方法,即點擊時模仿點擊上傳組件的按鈕
         document.querySelector('.uploadVoiceBtn').click()
        }
      }
    }
  },
  initVoiceButton:function(){   //初始化"voice"按鈕樣式
    const voiceButton = document.querySelector('.ql-voice'); //"ql-" 是插件自動加的前綴
    
    // 添加樣式,使用fontawesome初始化圖標的樣式
    voiceButton.classList.add('fa');
    voiceButton.classList.add('fa-volume-up');
    voiceButton.classList.add('fa-lg');

    // 當然,可以直接手寫樣式,如:
    // voiceButton.style.cssText = "width:80px; border:1px solid #ccc; border-radius:5px;";
    // voiceButton.innerText="上傳音頻";
  }
},

B. mounted中初始化顯示按鈕

mounted(){
  this.editorOption.initVoiceButton();   //初始化音頻圖標,這樣才能顯示
},

添加完成后效果:

在這里插入圖片描述

如果是在不同的文件,即配置文件和組件調(diào)用不在同一個文件,請參考:在quill-editor組件工具欄中添加自定義的方法,這篇文章在自定義按鈕部分寫的很清楚!

3. 監(jiān)聽上傳成功的回調(diào)函數(shù),在富文本輸入框中插入音頻標簽

這一步驟是整個功能的核心?。?!

網(wǎng)上有很多顯示自定義功能顯示的文字,但主要都是以圖片為主。大多用的都是 quill 的 pasteHTML 方法,但我試了以后并不能實現(xiàn)。將<audio src="" controls="true" ></audio>這樣的字符串加入到富文本綁定的變量上面后,并不能顯示。最后,可以使用insertEmbed插入對象到富文本中,但是,這個方法好像也只能插入image,不能插入其他的標簽。

解決方法:自定義FileBlot ==>> Quill調(diào)用自定義Blot (即自定義一個Quill能解析顯示的標簽,并且添加的里面去)

quill-editor 組件調(diào)用

import { quillEditor, Quill } from 'vue-quill-editor'
components: {
  quillEditor
},
<!-- change是內(nèi)容改變后的回調(diào)函數(shù),做頁面處理,這里不說,自行根據(jù)系統(tǒng)頁面處理 -->
<quill-editor ref="myTextEditor" v-model="editorTempValue" :options="editorOption" @change="onEditorChange($event)"> </quill-editor>

handleSuccess:上傳成功的回調(diào),主要功能實現(xiàn)的地方

handleSuccess(res, file, fileList){
  this.fullscreenLoading = false;
  // 獲取富文本組件實例
  let quill = this.$refs.myTextEditor.quill
  if (res.code === 0) {   // 如果上傳成功
    let length = quill.getSelection().index; // 獲取光標所在位置

    let BlockEmbed = Quill.import('blots/block/embed');
    class AudioBlot extends BlockEmbed {
      static create(value) {
        let node = super.create();
        node.setAttribute('src', value.url);   //設置audio的src屬性
        node.setAttribute('controls', true);   //設置audio的controls,否則他將不會顯示
        node.setAttribute('controlsList', 'nodownload');   //設置audio的下載功能為不能下載
        node.setAttribute('id', 'voice');     //設置一個id
        return node;
      }

      // static value(node) {
      //  return {
      //   url: node.getAttribute('src')
      //  };
      // }
    }
    AudioBlot.blotName = 'audio';
    AudioBlot.tagName = 'audio';   //自定義的標簽為audio
    Quill.register(AudioBlot);

    // insertEmbed(index: Number(插入的位置), type: String(標簽類型), value: any(參數(shù),將傳入到create的方法中去), source: String = 'api')
    quill.insertEmbed(length, 'audio', {url: res.data.url}, "api");
    quill.setSelection(length + 1); //光標位置向后移動一位
  } else {    
    this.$message.error(res.msg);    // 上傳失敗,提示錯誤信息
  }
},

完成后效果:

在這里插入圖片描述

總結

以上所述是小編給大家介紹的vue-quill-editor 富文本添加上傳音頻功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關文章

  • Vue路由重定向和別名的示例代碼

    Vue路由重定向和別名的示例代碼

    在Vue.js應用開發(fā)中,Vue Router 提供了許多特性來簡化前端路由管理和用戶體驗,其中一個重要的特性便是路由重定向和別名,它們可以幫助我們更好地管理和組織路由,本文將詳細介紹如何在Vue Router中使用路由重定向和別名,需要的朋友可以參考下
    2024-09-09
  • Vue.js 遞歸組件實現(xiàn)樹形菜單(實例分享)

    Vue.js 遞歸組件實現(xiàn)樹形菜單(實例分享)

    本文主要對介紹利用Vue.js 的遞歸組件,實現(xiàn)了一個最基本的樹形菜單。具有很好的參考價值,下面就跟著小編一起來看下吧
    2016-12-12
  • vue-cli3配置與跨域處理方法

    vue-cli3配置與跨域處理方法

    這篇文章主要介紹了vue-cli3配置與跨域處理方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • vue 中使用 vxe-table 制作可編輯表格的使用過程

    vue 中使用 vxe-table 制作可編輯表格的使用過程

    這篇文章主要介紹了vue 中使用 vxe-table 制作可編輯表格的使用過程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Vue?非常實用的自定義指令分享

    Vue?非常實用的自定義指令分享

    這篇文章主要介紹了Vue?非常實用的自定義指令分享,Vue自定義指令有全局注冊和局部注冊兩種方式,在?Vue,除了核心功能默認內(nèi)置的指令?(?v-model?和?v-show?),Vue?也允許注冊自定義指令,下文小編給大家分享那些常用到的Vue自定義指令
    2022-02-02
  • Vuex的各個模塊封裝的實現(xiàn)

    Vuex的各個模塊封裝的實現(xiàn)

    這篇文章主要介紹了Vuex的各個模塊封裝的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • el-input輸入校驗不能為空格以及不能輸入全部為空的內(nèi)容

    el-input輸入校驗不能為空格以及不能輸入全部為空的內(nèi)容

    這篇文章主要給大家介紹了關于el-input輸入校驗不能為空格以及不能輸入全部為空的內(nèi)容的相關資料,el-input驗證規(guī)則主要是為了確保輸入的內(nèi)容符合特定的要求,需要的朋友可以參考下
    2023-10-10
  • 如何在基于vue-cli的項目自定義打包環(huán)境

    如何在基于vue-cli的項目自定義打包環(huán)境

    本篇文章主要介紹了在基于vue-cli的項目自定義打包環(huán)境,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • vue項目遇見事件冒泡該如何處理詳解

    vue項目遇見事件冒泡該如何處理詳解

    冒泡事件處理是由內(nèi)而外發(fā)生的,例如有兩個父子div,給他們分別寫上點擊事件,點擊子div先響應的是子div,再是父div,下面這篇文章主要給大家介紹了關于vue項目遇見事件冒泡該如何處理的相關資料,需要的朋友可以參考下
    2023-04-04
  • Vue利用插件實現(xiàn)打印功能的示例詳解

    Vue利用插件實現(xiàn)打印功能的示例詳解

    這篇文章主要為大家詳細介紹了Vue如何利用vue-print-nb插件實現(xiàn)打印功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學一下
    2023-03-03

最新評論

溧水县| 江陵县| 蓬莱市| 松原市| 洛扎县| 凉山| 天台县| 界首市| 嘉鱼县| 武陟县| 广昌县| 阳原县| 苗栗市| 林州市| 桐庐县| 潞城市| 岑巩县| 鹿邑县| 分宜县| 新泰市| 乐清市| 西安市| 保康县| 昌黎县| 喀什市| 星子县| 德江县| 依安县| 广南县| 宁城县| 广河县| 绍兴县| 黄陵县| 鄂温| 平和县| 武鸣县| 怀安县| 淮北市| 蕲春县| 册亨县| 广元市|