用Vue.js播放声音

Kyl*_*lie 5 javascript vue.js

如何使用Vue.js播放声音?

似乎我不能按常规方式做。

  import Vue from 'vue'
  import AppView from './components/App.vue'

  console.log('Play outside of vue')
  var audio = new Audio('file.mp3')
  audio.play()

  new Vue({
    el: '#root',
    mounted () {
       console.log('Will it play here?? lol')
       var audio = new Audio('file.mp3')
       audio.play()
    }, 
    render: h => h(AppView)
  })
Run Code Online (Sandbox Code Playgroud)

如它所说,音频未定义?我是否必须以某种方式导入它?是否有特定的Vue软件包?还是npm包?

我真的不明白,尽管Audio只是普通的javascript吗?

小智 7

**** 编辑 ****

随着时间的流逝,我使用 VueJs 进行了更多开发,我能够更好地阐明这个问题

问题是:音频的定义超出了 VueJs 组件的范围。VueJS 将组件封装在它们自己的上下文中。当我们从 new Vue hook 中声明它时,它不会意识到这个对象的存在。

正确的做法是:

import Vue from 'vue';
import AppView from './components/App.vue';

new Vue({
  el: '#root',
  mounted () {
   console.log('Will it play here?? lol');
   console.log('Play outside of');
   var audio = new Audio('file://path-to-file/file.mp3'); // path to file
   audio.play();
}, 
render: h => h(AppView)
});
Run Code Online (Sandbox Code Playgroud)

另外,我应该提到在浏览器的上下文中尝试访问“file://”是行不通的,因为浏览器是沙盒的。您应该使用 an<input type="file" />来获取音频的来源,然后在操作文件本身后将其放入音频变量中。

还值得一提的是,如果您创建一个全局插件以在 Vue 的this上下文中使用,这种方法会工作得更好。这将使组件可重用并在您需要访问的每个组件实例中可用,从而允许您播放或暂停来自任何组件源的音频


Kev*_*wat 5

使用var audio = new Audio(require('./file.mp3'))它将创建正确的路径,因为在中var audio = new Audio('file.mp3'),您的路径“ file.mp3”已解码为字符串。

  • 当您使用 require 时,Webpack 将确保您的音频资源的路径和文件名正确。并且不要忘记将文件复制到位。我使用了 `const sound = ( new Audio( require('@/assets/foo.ogg') ).play();`,它引用了我的 Vue 项目中的 src/assets 。 (2认同)