侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

vue quill editor 使用富文本添加上传音频功能

前端  /  管理员 发布于 3年前   355

1. 前言

vue-quill-editor 是vue项目中常用的富文本插件,其功能能满足大部分的项目需求。但是,最近项目中,需要在富文本中上传音频文件,但是vue-quill-editor这个富文本仅支持图片,视频上传;所以这个功能需要自定义。

怎么实现这个功能?

  • 写一个只能上传音频的组件,并且隐藏
  • 在富文本插件的toolbar定义一个按钮,点击时调用上传组件
  • 监听上传成功的回调函数,在富文本输入框中插入音频标签

2. 功能实现

2.1 基于Element-ui实现上传组件,并且隐藏(不能让用户点击)

upload

对应的钩子函数:

actionUrl:直接根据后台接口赋值即可
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:上传成功的回调,主要功能实现的地方,后面介绍

uploadIng:设置显示loading

uploadIng(){    //上传时显示loading  this.fullscreenLoading = true}

2.2 在富文本插件的toolbar定义一个按钮,点击时调用上传组件

注意: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();   //初始化音频图标,这样才能显示},

添加完成后效果:

如果是在不同的文件,即配置文件和组件调用不在同一个文件,请参考:在quill-editor组件工具栏中添加自定义的方法,这篇文章在自定义按钮部分写的很清楚!

3. 监听上传成功的回调函数,在富文本输入框中插入音频标签

这一步骤是整个功能的核心!!!

网上有很多显示自定义功能显示的文字,但主要都是以图片为主。大多用的都是 quill 的 pasteHTML 方法,但我试了以后并不能实现。将这样的字符串加入到富文本绑定的变量上面后,并不能显示。最后,可以使用insertEmbed插入对象到富文本中,但是,这个方法好像也只能插入image,不能插入其他的标签。

解决方法:自定义FileBlot ==>> Quill调用自定义Blot (即自定义一个Quill能解析显示的标签,并且添加的里面去)

quill-editor 组件调用

import { quillEditor, Quill } from 'vue-quill-editor'components: {  quillEditor},
 

handleSuccess:上传成功的回调,主要功能实现的地方

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(参数,将传入到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 富文本添加上传音频功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

您可能感兴趣的文章:

  • vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
  • mpvue开发音频类小程序踩坑和建议详解
  • vue通过点击事件读取音频文件的方法
  • vue中添加mp3音频文件的方法
  • 解决ios微信下vue项目组件切换并自动播放音频问题
  • vue中音频wavesurfer.js的使用方法


  • 上一条:
    Vue v-bind动态绑定class实例方法
    下一条:
    vue项目创建步骤及路由router
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 如何优雅处理async await错误推荐:await-to-js库(0个评论)
    • lodash工具库(0个评论)
    • nginx + vue配置实现同域名下不同路径访问不同项目(0个评论)
    • 在js中使用URL类用来解析处理URL的示例代码(0个评论)
    • js中动画事件:requestAnimationFrame、transitionend、animation...(0个评论)
    • 近期文章
    • 如何优雅处理async await错误推荐:await-to-js库(0个评论)
    • lodash工具库(0个评论)
    • 在Laravel项目中使用中间件方式统计用户在线时长功能代码示例(0个评论)
    • 在Laravel中构建业务流程模型(0个评论)
    • windows系统中安装FFMpeg及在phpstudy环境php7.3 + php-ffmpeg扩展的使用流程步骤(0个评论)
    • 在go语言中对浮点的数组、切片(slice)进行正向排序和反向排序(0个评论)
    • 在go语言中对整数数组、切片(slice)进行排序和反向排序(0个评论)
    • 在go语言中对字符串数组、切片(slice)进行排序和反向排序(0个评论)
    • 最新国内免注册ChatGPT体验站_ChatGPT镜像站访问链接地址2023/3/28持续更新(0个评论)
    • 在Laravel项目中的实现无密码认证之:发送邮箱链接授权(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客