vue中音频wavesurfer.js的使用方法


Posted in Vue.js onFebruary 20, 2020

本文为大家分享了vue中音频wavesurfer.js的使用方法,供大家参考,具体内容如下

效果图

vue中音频wavesurfer.js的使用方法

首先引入wavesurfer.js

vue中音频wavesurfer.js的使用方法

其次 封装 wavesurfer.js`

<template>
 <div class="waveformOuter">
 <div id="waveform" ref="waveform" />
 <div class="play" @click="playMusic">
  <svg-icon v-if="!isPlaying" icon-class="play" class="icon myplay" />
  <svg-icon v-else icon-class="stop" class="icon mystop" />
  <p>{{ time }}</p>
 </div>
  <!-- <p>{{ url }}</p> -->
 </div>
</template>
<script>
import WaveSurfer from '@/assets/js/wavesurfer'
export default {
 props: ['url', 'toStopMusic', 'loadWave'],
 data() {
 return {
  isPlaying: false,
  time: '00:00',
  wavesurfer: null,
 }
 },
 watch: {
 'loadWave': function() {
  this.loadMusic()
 },
 'url': function() {
  // return this.wavesurfer.getCurrentTime()
  this.loadMusic(true)
  console.log('url---------------------------------------')
 },
 'toStopMusic': function() {
  console.log('toStopMusic---------------------------------------')
  if (this.wavesurfer) {
  this.wavesurfer.pause()
  }
 }
 },
 mounted() {
 this.$nextTick(() => {
  if (this.loadWave) {
  console.log('haha')
  this.loadMusic()
  }
 })
 },
 methods: {
 itemClick(node) {
  console.log(node.model.id)
 },
 buZero(num) {
  return num > 9 ? num : '0' + num
 },
 loadMusic(bool) {
  console.log('this.WaveSurfer--------------------------------------', WaveSurfer)
  if (this.wavesurfer) {
  if (bool) {
   this.time = '00:00'
   this.wavesurfer.load(this.url)
  }
  } else {
  this.wavesurfer = WaveSurfer.create({
   container: this.$refs.waveform,
   waveColor: 'violet',
   progressColor: 'purple'
  })
  this.wavesurfer.load(this.url)
  this.wavesurfer.on('ready', () => {
   // this.wavesurfer.play()
  })
  this.wavesurfer.on('audioprocess', (e) => {
   const times = Math.floor(e)
   this.time = this.buZero(Math.floor(times / 60)) + ':' + this.buZero(times % 60)
  })
  this.wavesurfer.on('finish', () => {
   this.isPlaying = false
  })
  }
 },
 stopMusic(){
  if (this.wavesurfer) {
   this.wavesurfer.stop();
  }
 },
 playMusic() {
  console.log("开始")
  console.log(this.wavesurfer)
  console.log("点击开始播放按钮",this.url)
  if (this.wavesurfer) {
  if (this.wavesurfer.isPlaying()) {
   this.isPlaying = false
  debugger
   this.wavesurfer.pause()
  } else {
   this.isPlaying = true
   this.wavesurfer.play()
  }
  }
 }
 }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.myplay{
 position: absolute;
 top: 50%;
 font-size: 17px;
 margin: -10px 0 0 -9px;
 left: 50%;
}
.mystop{
 position: absolute;
 top: 50%;
 margin: -15px 0 0 -18px;
 left: 50%;
 font-size: 25px;
}
#waveform{
 width: calc(100% - 150px);
 height:128px;
 float: left;
 margin-right: 22px;
 background: black;
}
.play{
 position: relative;
 width: 128px;
 height:128px;
 border-radius:3px;
 background-color:#EBEEF5;
 float: left;
 text-align: center;
}
.play p{
 margin-top: 85px;
 color: #3683FA;
}

.waveformOuter{
 margin-bottom: 20px;
 overflow: hidden;
}
</style>

再然后 在需要的组件中引入

<div class="luyin" v-if="this.isYinyin">
 <!-- {{this.isYinyin}} -->
 <my-wave-sufer ref="handleDialogClose" :url="luyinUrl" :load-wave="showDialog" :to-stop-music="!showDialog" />
</div>
isYinyin: false,//是否加载录音组件
showDialog: true, //是否初始化录音组件
luyinUrl: "", //录音url 
数据库录音格式 123.wav

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
vue+vant实现购物车全选和反选功能
Nov 17 Vue.js
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
Vue 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
详解Vue的七种传值方式
Feb 08 Vue.js
vue3中的组件间通信
Mar 31 Vue.js
idea编译器vue缩进报错问题场景分析
Jul 04 Vue.js
Vue+Flask实现图片传输功能
Apr 01 Vue.js
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 Vue.js
vue 自定义组件添加原生事件
Apr 21 Vue.js
vue使用vant中的checkbox实现全选功能
Nov 17 #Vue.js
vue+vant实现购物车全选和反选功能
Nov 17 #Vue.js
在vue中通过render函数给子组件设置ref操作
Nov 17 #Vue.js
vue+iview分页组件的封装
Nov 17 #Vue.js
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 #Vue.js
vue+iview实现分页及查询功能
Nov 17 #Vue.js
vue中echarts的用法及与elementui-select的协同绑定操作
Nov 17 #Vue.js
You might like
最令PHP初学者们头痛的十四个问题
2007/01/15 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
js实时监听文本框状态的方法
2011/04/26 Javascript
点击进行复制的JS代码实例
2013/08/23 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
js 性能优化之算法和流程控制
2017/02/15 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
layer.open 按钮的点击事件关闭方法
2018/08/17 Javascript
javascript实现计算器功能
2020/03/30 Javascript
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
python实现的希尔排序算法实例
2015/07/01 Python
python实现二维数组的对角线遍历
2019/03/02 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
Python-jenkins 获取job构建信息方式
2020/05/12 Python
天猫精选:上天猫,就够了
2016/09/21 全球购物
美国婚戒购物网站:Anjays Designs
2017/06/28 全球购物
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
保送生自荐信范文
2013/10/06 职场文书
大学生毕业求职自荐书范文
2014/02/04 职场文书
法制宣传口号
2014/06/16 职场文书
合作意向书
2014/07/30 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
于丹论语心得观后感
2015/06/15 职场文书
六年级作文之预言作文
2019/10/25 职场文书
Pytest中conftest.py的用法
2021/06/27 Python
纯html+css实现Element loading效果
2021/08/02 HTML / CSS
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript