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

下面为您讲解vue quill editor 如何添加富文本上传音频功能的攻略:

1. 安装依赖

首先需要安装vue-quill-editor和quill-image-extend-module的依赖,使用npm命令如下:

npm install vue-quill-editor quill-image-extend-module

2. 引入依赖

在需要实现富文本编辑器的组件中,import引入vue-quill-editor和quill-image-extend-module,并且将组件注册为本地组件,示例代码如下:

<template>
  <div>
    <!-- 编辑器组件 -->
    <vue-quill-editor ref="myQuillEditor"
                      v-model="editorContent"
                      :options="editorOption"/>
  </div>
</template>

<script>
import VueQuillEditor from 'vue-quill-editor'
import Quill from 'quill'
import 'quill/dist/quill.snow.css'
import ImageExtend from 'quill-image-extend-module'

Quill.register('modules/imageExtend', ImageExtend)

export default {
  name: "Editor",
  components: { VueQuillEditor },
  data () {
    return {
      editorContent: '',
      editorOption: {
        placeholder: '请输入详情',
        theme: 'snow',
        modules: {
          toolbar: [
            ['bold', 'italic', 'underline', 'strike'],
            ['blockquote', 'code-block'],
            [{ 'header': 1 }, { 'header': 2 }],
            [{ 'list': 'ordered' }, { 'list': 'bullet' }],
            [{ 'script': 'sub' }, { 'script': 'super' }],
            [{ 'indent': '-1' }, { 'indent': '+1' }],
            [{ 'direction': 'rtl' }],
            [{ 'size': ['small', false, 'large', 'huge'] }],
            [{ 'header': [1, 2, 3, 4, 5, 6, false] }],
            [{'color': []}, {'background': []}],
            [{'font': []}],
            [{'align': []}],
            ['clean'],
            ['link', 'image', 'video', 'audio']
          ],
          imageExtend: {
            loading: true,
            sizeLimit: 1000000,
            terminateOnImageLoad: true
          },
          audio: {
            buttonTitle: "添加音频"
          }
        }
      }
    };
  }
}
</script>

上面代码中,我们使用了"quill-image-extend-module"来实现上传音频文件的功能。在editor Option的modules中添加audio属性,为上传音频定义一个按钮标题,这个按钮将呈现在富文本编辑器的工具栏中。

3. 自定义规则Formats

在组件内定义一个formats的对象,使音频视频都可以被Quill在内容中识别:

<template>
  <div>
    ...
  </div>
</template>

<script>
import VueQuillEditor from 'vue-quill-editor'
import Quill from 'quill'
import 'quill/dist/quill.snow.css'
import ImageExtend from 'quill-image-extend-module'

Quill.register('modules/imageExtend', ImageExtend)

export default {
  name: "Editor",
  components: { VueQuillEditor },
  data () {
    return {
      ...
      editorOption: {
        ...
          formats: [
            'header', 'font', 'size', 'bold', 'italic', 'underline', 'strike', 'blockquote',
            'list', 'bullet', 'indent', 'link', 'image', 'video', 'audio'
          ],
        ...
      },
      ...
    };
  }
}
</script>

4. 定义audio上传事件

我们使用"quill-image-extend-module"来定义上传音频的事件,通过判断文件类型来判断是音频还是视频文件,最后将文件上传到服务器。

<template>
  <div>
    ...
  </div>
</template>

<script>

...

Quill.register('modules/audioExtend', function(quill, options) {
  var audioButton = document.querySelector('.ql-audio');
  audioButton.addEventListener('click', function() {
    var input = document.createElement('input');
    input.setAttribute('type', 'file');
    input.setAttribute('accept', 'audio/*');
    input.click();

    input.onchange = function() {
      var file = input.files[0];
      var formData = new FormData();
      formData.append('file', file);
      console.log(file);
      var url = '';
      postAudio(formData).then(data=>{
        if(data.code === 0){
          url = data.data.url;
          var range = quill.getSelection();
          quill.insertEmbed(range.index, 'audio', url);
        } else {
          Message({
            message: data.msg,
            type: 'error'
          })
        }
      })
    };
  });
});

function postAudio(data) {
  var promise = new Promise((resolve, reject) => {
    axios.post('/api/uploadAudio', data, {
      headers: { 'Content-Type': 'multipart/form-data' }
    })
      .then(response => {
        resolve(response.data)
      }, err => {
        reject(err)
      })
  })
  return promise
}

export default {
  name: "Editor",
  components: { VueQuillEditor },
  data () {
    return {
      ...
      editorOption: {
        ...
        modules: {
          ...
          audioExtend: {}
        } 
      }
      ...
    };
  }
}

</script>

上面代码中,我们使用了"axios"插件将音频文件上传到服务器,服务器可以返回上传后的url,然后将url插入到富文本编辑器的内容中。

5. 显示audio信息

现在音频文件已经上传到服务器,接下来要在富文本编辑器中显示它。在'snow'主题CSS中我们需要添加一个"ql-audio"类来实现这一点。

.ql-snow .ql-audio {
  background-position: center;
  background-repeat: no-repeat;
  background-size: 24px 24px;
  width: 24px;
  height: 24px;
}

最后,我们需要定义audio标签,来实现播放音频的功能。

<template>
  <div>
    <vue-quill-editor ref="myQuillEditor"
                      v-model="editorContent"
                      :options="editorOption"/>
    <audio ref="audioPlayer"/>
  </div>
</template>

<script>

...

Quill.register('modules/audioExtend', function(quill, options) {
  var Audio;

  Audio = Quill.import('formats/audio');
  Audio.tagName = 'AUDIO';
  Quill.register(Audio, true);

  var audioButton = document.querySelector('.ql-audio');
  audioButton.addEventListener('click', function() {
    var input = document.createElement('input');
    input.setAttribute('type', 'file');
    input.setAttribute('accept', 'audio/*');
    input.click();

    input.onchange = function() {
      var file = input.files[0];
      var formData = new FormData();
      formData.append('file', file);
      console.log(file);
      var url = '';
      postAudio(formData).then(data=>{
        if(data.code === 0){
          url = data.data.url;
          var range = quill.getSelection();
          quill.insertEmbed(range.index, 'audio', url);
        } else {
          Message({
            message: data.msg,
            type: 'error'
          })
        }
      })
    };
  });

  Quill.register('modules/audioHandler', function(quill, options) {
    var container = document.querySelector('.ql-editor');
    container.addEventListener('click', function(e) {
      if (e.target && e.target.classList.contains('ql-audio')) {
        var url = e.target.getAttribute('src');
        var audio = this.$refs.audioPlayer;
        audio.src = url;
        e.target.classList.add('playing');
        audio.addEventListener("ended", function() {
          e.target.classList.remove('playing');
        });
        audio.play();
      }
    }.bind(this));
  });
});

...

export default {
  name: "Editor",
  components: { VueQuillEditor },
  data () {
    return {
      ...
      editorOption: {
        ...
        modules: {
          ...
          audioExtend: {},
          audioHandler: {}
        }
      }
      ...
    };
  }
}

</script>

上面代码中,我们通过输入audio标签语句将服务器上的音频文件连接到富文本编辑器的内容。然后,我们又将控制端口添加到了富文本编辑器上,以激活音频播放器。

这就是给vue quill editor添加上传音频功能的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue quill editor 使用富文本添加上传音频功能 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • Javascript Date setHours() 方法

    以下是关于JavaScript Date对象的setHours()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的setHours()方法 JavaScript Date对象的setHours()方法设置日期对象的小时部分。该方法接受一个整数,表示要设置的小时数。如果该参数超出了24小时制的范围,则自动调整为合法的小时数。 下面是使用…

    JavaScript 2023年5月11日
    00
  • jsp+ajax发送GET请求的方法

    当需要在JSP页面中使用ajax发送GET请求时,可以参照以下步骤进行操作: 步骤一:引入jQuery库文件 使用ajax发送请求时需要引入jQuery库文件。可以在head标签中使用以下代码引入: <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js&quot…

    JavaScript 2023年6月11日
    00
  • js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例

    下面我就详细讲解一下这三个操作的完整攻略。 JS常用方法 JS中有许多常用方法,以下是一些常见的方法: querySelector:用于获取文档中匹配指定选择器的第一个元素。 getElementById:根据id获取文档中的元素。 addEventListener:用于向指定元素添加事件句柄。 setTimeout:用于在指定的时间之后执行一次函数。 se…

    JavaScript 2023年5月28日
    00
  • 一些你可能不熟悉的JS知识点总结

    一些你可能不熟悉的JS知识点总结 理解JS中的this指向 在 Javascript 中,“this”是一个关键字,它指向函数执行时的上下文对象。在全局作用域中,“this”指向全局对象(window / global),在函数内部,“this”指向函数调用时的“拥有者”(即调用该函数的对象)。更多的用法和示例请参考以下代码: let obj = { nam…

    JavaScript 2023年5月28日
    00
  • javascript中10个正则表达式使用介绍基础篇

    JavaScript中10个正则表达式使用介绍基础篇 正则表达式是一种用来匹配字符串模式的工具。在JavaScript中,可以使用正则表达式来对字符串进行匹配、搜索、替换等操作。 本篇攻略将为大家介绍JavaScript中10个常用的正则表达式,让你快速理解和掌握正则表达式的基础知识。 1. 匹配字符 1.1 匹配数字 \d是匹配任意数字的元字符。例如,\d…

    JavaScript 2023年6月10日
    00
  • js Array对象的扩展函数代码

    我来给你讲解一下关于”js Array对象的扩展函数代码”的完整攻略。 1. 什么是数组(Array)对象 在JavaScript中,数组(Array)是一个数字索引的对象集合,可以高效地存储一组数据。数组对象是指定大小的、有序的对象,它们可以存储各种类型的数据,包括数字、字符串、布尔值,甚至其他数组和对象。 2. 数组对象的扩展函数代码 下面是几个使用数组…

    JavaScript 2023年5月27日
    00
  • 常用的JavaScript模板引擎介绍

    下面是常用的JavaScript模板引擎介绍: JavaScript模板引擎介绍 什么是模板引擎? 模板引擎是一种将数据和模板组合成HTML、XML或其他文档格式的工具。它们可以让你在客户端或服务器端直接以JavaScript的方式生成HTML,减轻了前端和后端的通信压力。 常用的JavaScript模板引擎 1. Mustache.js Mustache.…

    JavaScript 2023年5月27日
    00
  • Javascript摸拟自由落体与上抛运动原理与实现方法详解

    Javascript模拟自由落体与上抛运动原理与实现方法详解 原理 自由落体是指在重力作用下,物体沿竖直方向做自由运动。上抛运动是指物体受到一个斜向上的初速度后,在重力作用下做抛体运动。 在Javascript中,我们可以通过模拟物体在受到重力作用时的加速度来实现自由落体和上抛运动的效果。 对于自由落体和上抛运动,我们需要掌握以下公式: 自由落体公式 在重力…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部