vue3中使用wavesurfer插件 动态生成id

news2025/1/10 10:55:05

需求最终实现的是对话这种,音频+文字的对话在这里插入图片描述

使用方法:

npm install wavesurfer.js --save

官方文档:

https://wavesurfer-js.org/

参数,方法可以去文档查看

直接放封装组件代码

开发背景vue3+ts
WaveSurfer.vue

<template>
  <Spin :tip="null" :spinning="loadLoading">
    <div :class="`wave-surfer-${index}`" class="flex items-center">
      <Icon class="playIcon" :icon="icon" prefix="ali" @click="playMusic" />
    </div>
  </Spin>
</template>
<script lang="ts">
  import { Spin } from 'ant-design-vue';
  import { defineComponent, toRefs, ref, onMounted, nextTick, h } from 'vue';
  import WaveSurfer from 'wavesurfer.js';

  import Icon from '/@/components/Icon';

  export default defineComponent({
    name: 'WaveSurfer',
    components: { Icon, Spin },
    props: {
      waveSrc: {
        type: String,
        default: 'http://localhost:3100/src/components/WaveSurfer/src/01.mp3',
      },
      index: {
        type: Number,
      },
    },

    setup(props) {
      const { waveSrc, index } = toRefs(props);
      const icon = ref('icon-bofang');
      let wavesurfer = [];
      const loadLoading = ref(false);

      function render(id, selector, url) {
        loadLoading.value = true;
        var domEl = document.createElement('div');
        domEl.setAttribute('id', 't-' + id);
        domEl.setAttribute('class', 'waveform');
        document.querySelector(selector).appendChild(domEl);
        let trackid = 't-' + id;
        wavesurfer[trackid] = WaveSurfer.create({
          container: domEl,
          waveColor: '#C2C2C2',
          progressColor: '#2273FF',
          cursorColor: '#fff',
          height: 18,
          barWidth: 2,
          barGap: 1,
        });

        wavesurfer[trackid].load(url);
        wavesurfer[trackid].on('error', function (e) {
          console.warn(e);
        });
        wavesurfer[trackid].on('ready', function () {
          console.log('111111');
          loadLoading.value = false;
        });

        return wavesurfer[trackid];
      }
      onMounted(() => {
        nextTick(() => {
          render(index.value, '.wave-surfer-' + index.value, waveSrc.value);
        });
      });
      function playMusic() {
        let trackid = 't-' + index.value;
        if (icon.value == 'icon-bofang') {
          icon.value = 'icon-zanting';
          wavesurfer[trackid].play();
        } else {
          icon.value = 'icon-bofang';
          wavesurfer[trackid].playPause();
        }
      }

      return {  playMusic, icon, loadLoading };
    },
  });
</script>
<style lang="less">
  .playIcon {
    line-height: 18px;
    font-size: 18px;
    margin-right: 8px;
    cursor: pointer;
  }
  .waveform {
    width: calc(100% - 18px);
  }
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/787482.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java学习笔记----Day11(多线程)

多线程 1. 进程、线程2. 实现线程的三种方式3. 线程的生命周期4. 线程里常用的方法5. 线程的调度&#xff08;了解&#xff09;6. 多线程并发环境下&#xff0c;数据的安全问题7. Java三大变量&#xff08;线程同步机制synchronized&#xff09;【重要的内容】8. 死锁9. 开发中…

【正点原子H750MiniPro H750】按键以及时钟

文章目录 前言1.CubeMx的配置步骤1.配置RCC2.配置按键IO口 3.测试代码 总结 前言 H750的最高主频可以达到480Mhz但是一开始在CubeMx配置过程中发现主频达到480Mhz时会报错&#xff0c;以下将会介绍解决办法以及按键移植。 1.CubeMx的配置步骤 1.配置RCC 完成上述步骤配置时钟…

【Ajax】笔记-Axios与函数发送AJAX请求

Axios 和 Ajax 的区别 1、Axios是一个基于Promise的HTTP库&#xff0c;而Ajax是对原生XHR的封装&#xff1b; 2、Ajax技术实现了局部数据的刷新&#xff0c;而Axios实现了对ajax的封装。 优缺点&#xff1a; ajax&#xff1a; 本身是针对MVC的编程,不符合现在前端MVVM的浪潮 基…

小程序 user agent stylesheet 覆盖了page下wxss背景色

如下图&#xff1a; login页面的page下的背景色&#xff0c;被&#xff1a;user agent stylesheet覆盖。 分析与解决&#xff1a; 1、user agent stylesheet是浏览器默认样式表&#xff0c;是浏览器默认样式。 2、不同浏览器的默认样式不同个&#xff0c;甚至同种浏览器不同版…

Linux笔记——rpm与yum下载软件命令介绍

系列文章目录 Linux笔记——进程管理Linux笔记——进程管理与网络监控技术讲解Linux笔记——进程管理 Linux笔记——管道相关命令以及shell编程 Linux笔记——磁盘进行分区与挂载介绍 文章目录 系列文章目录 前言 一 RPM介绍 1.1 RPM简单介绍 1.2 RPM命令语法 1.2.1 …

大专毕业生想进入单片机行业,我有何选择?

我在这说一些单片机行业找工作的一些观点和经验。确实&#xff0c;单片机工作相对于IT行业来说&#xff0c;对专业知识和技能的要求可能稍微高一些。这是因为单片机开发涉及到硬件和底层编程&#xff0c;需要掌握嵌入式系统、电路设计、数字和模拟电子等方面的知识。拥有专业对…

CSDN周赛-第65期(参赛体验)

CSDN周赛-第65期&#xff08;参赛体验&#xff09; 竞赛内容考试时间考试成绩题目分析体验及感悟 竞赛内容 满分100分&#xff0c;4道非编程题与2道编程题&#xff0c;编程题可使用Java、C、C、C#、Python、JavaScript、lua、go等编程语言。 考试时间 考试进入时间&#xff…

leetcode 51. N 皇后

2023.7.24 回溯经典应用“N皇后”问题。 本题依旧是利用回溯来做&#xff0c;将棋盘是放在一个vector<string>数组里面&#xff0c;棋盘的行数代表树的高度&#xff0c;棋盘的列数代表树的宽度。 还需要定义一个辅助函数valid用于判断当前棋盘符不符合条件。 下面上代码&…

【C++】容器对象作为函数参数传递时,如何保证外部容器对象不被修改(以vector为例)

几种传参方式简单对比 传值 1.1 参数形式&#xff1a;void fun(vector<int> v); 1.2 函数调用&#xff1a;fun(v); 1.3 函数内使用&#xff1a;cout << v[1]; 1.4 是否可以改变函数外对象的值&#xff1a;否 1.5 是否会调用拷贝构造函数&#xff1a;是传指针 2.1 …

Mac电脑必备:3款优质系统软件推荐

对于Mac电脑使用者来说&#xff0c;良好的系统软件是确保计算机高效运行和提升使用者体验的关键。无论是日常办公、娱乐还是创意设计&#xff0c;一系列优质的系统软件都能为使用者带来更顺畅、更便捷的操作体验。在本文中&#xff0c;我们将推荐3款在Mac电脑上必备的优质系统软…

如何编写银行转账的测试用例,可以来看这里.....

前言 最近呢有很多的小伙伴问我有没有什么软件测试的面试题&#xff0c;由于笔者之前一直在忙工作上的事情&#xff0c;没有时间整理面试题&#xff0c;刚好最近休息了一下&#xff0c;顺便整理了一些面试题&#xff0c;现在就把整理的面试题分享给大家&#xff0c;废话就不多…

简单易用的DuckDB数据库管理系统

大家好&#xff0c;DuckDB是一个免费的、开源的、嵌入式数据库管理系统&#xff0c;专为数据分析和在线分析处理而设计。这意味着以下几点&#xff1a; 它是免费的开源软件&#xff0c;因此任何人都可以使用和修改代码。 它是嵌入式的&#xff0c;这意味着DBMS&#xff08;数据…

C++中的数学问题---进制转换

二进制转十六进制 string binToHex(string bin){string hex"";if(bin.size()%4!0){for(int i0;i<(4-bin.size()%4);i){bin"0"bin;}}for(int i0;i<bin.size();i4){string tmpbin.substr(i,4);bitset<4>b(tmp);hexb.to_ulong()<10?char(b.t…

定点乘法器优化(3)---华为杯

一. 简介 在上次优化中&#xff0c;针对部分积生成进行了一个优化&#xff0c;将一个部分积生成的门电路数从221减少到了119。虽然减少了很多&#xff0c;但不够。本次将提出另外一种新的编码与部分积生成方式&#xff0c;将门电路的个数大大减少。 二. 新的编码方式 基4 Bo…

fiddler基本使用(上)

目录 1、Fiddler介绍 2、fiddler下载及安装证书 4、抓取手机包 5、fifter 数据包过滤 6、模拟限速 1、Fiddler介绍 本质&#xff1a;位于客户端与服务器端之间的代理。 fiddler会捕获客户端、服务器端的包&#xff0c;发送给彼此。 代理设置&#xff1a; 2、fiddler下载及…

VMware虚拟机无法上网的解决办法

&#xff08;1&#xff09;1、在虚拟机右下角的网络适配器上面观察该图标是否是有绿色的灯在闪烁&#xff0c;如果网络适配器是灰色的证明虚拟机的网络没有打开&#xff0c;而是被禁用了&#xff0c;在适配器上点击鼠标右键&#xff0c;打开【设置】&#xff0c;在【已连接】、…

医院影像PACS系统和放射影像科业务

前言&#xff1a;对于医院的放射科来说&#xff0c;要实现其业务效率&#xff0c;增强患者的就医体验&#xff0c;提升医院的服务质量&#xff0c;那么一个良好的PACS系统能够高效实现这一目标。本文以放射科为例&#xff0c;对PACS系统和就医流程进行一个简单的介绍&#xff0…

Golang time 包以及日期函数

time 包 在 golang 中 time 包提供了时间的显示和测量用的函数。 time.Now()获取当前时间 可以通过 time.Now()函数获取当前的时间对象&#xff0c;然后获取时间对象的年月日时分秒等信息。 示例代码如下&#xff1a; package mainimport ("fmt""time" )…

js实现上下无缝滚动(不卡顿)

效果图如下&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport"…

Java阶段五Day13

Java阶段五Day13 文章目录 Java阶段五Day13回顾昨天思路Redis五种数据类型和类型无关的命令基本类型——String基本类型——hash基本类型——list基本类型——set基本类型——zset&#xff08;sorted set&#xff09; Redis实现分布式锁抢锁的设计思路整改当前消费逻辑添加分布…