首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在react中用<audio>播放音乐?

问有没有办法在react中用<audio>播放音乐?
EN

Stack Overflow用户
提问于 2017-12-03 16:25:38
回答 1查看 12.8K关注 0票数 5

我正在创建一个简单的反应应用程序,需要与给定的网址播放音乐。我尝试使用硬编码的音乐url进行测试,并使用<audio>标签播放音乐,就像我们在HTML中所做的那样。

代码语言:javascript
复制
class Music extends React.Component {
  render() {

    return (
      <span>

        <audio src="URL">
  </span>

    )
  }
}

但这不会编译。在react应用程序中播放音乐的最简单方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-03 17:08:47

一种解决方案是使用HTML5 Audio。创建new Audio对象并使用自定义的Play / Pause按钮对其进行控制。

基本示例:

​

代码语言:javascript
复制
class Music extends React.Component {
    constructor(props) {
    super(props);
    this.state = {
      play: false,
      pause: true,
    }
    this.url = "http://streaming.tdiradio.com:8000/house.mp3";
    this.audio = new Audio(this.url);
  }

  play = () => {
  this.setState({ play: true, pause: false })
    this.audio.play();
  }
  
  pause = () => {
  this.setState({ play: false, pause: true })
    this.audio.pause();
  }
  
  render() {
    
  return (
    <div>
      <button onClick={this.play}>Play</button>
      <button onClick={this.pause}>Pause</button>
    </div>
    );
  }
}

ReactDOM.render(
  <Music />,
  document.getElementById('container')
);
代码语言:javascript
复制
<div id="container"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

​

您还可以使用addEventListener来控制和处理Play / Pause。

Play:

代码语言:javascript
复制
this.audio.addEventListener('play', () => {
  this.setState({
    play: true,
    pause: false,
  })
});

暂停:

代码语言:javascript
复制
this.audio.addEventListener('pause', () => {
  this.setState({
    play: false,
    pause: true,
  })
});

文档和示例:

Audio/Video Event Listener

MDN HTML5 Audio

重要说明:

HTML5 Audio元素没有stop()函数,因此pause()之后的音频仍在加载(后台缓冲)。

这是一个解决方案:HTML5 Video: Force abort of buffering

JSFIddle: https://jsfiddle.net/y2j0vzbe/

希望这能有所帮助。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47616619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档