如何在不使用按钮的情况下在React中播放音频文件?

磷酸钙

我是React的新手,正在尝试创建Pomodoro 25 + 5计时器之一。

我需要设置一个音频文件,使其在时钟为零时开始播放,但是尽管尝试了许多在线提示,但我仍无法弄清楚如何播放音频。

<audio></audio>在带有源链接的文件末尾有一个标记,但是我不知道一旦时钟达到零就如何启动它。通过将它传递给按钮上的“ onClick”属性(不是练习的重点),我设法做到了这一点,但是动态地播放它却无法搞清楚。

这是渲染计时器的组件(忽略科学怪人的怪兽startCountdown):


class Clock extends Component {
    state = {
        minutes: 25, 
        seconds: 0,
        breakLength: 5,
        sessionLength: 25,
        isOn: false,
        count: 1,
        type: true
    }
  startCountdown = () => {
    this.buzzer();
    this.setState({
      isOn: true,
    })
    this.timer = setInterval(() => this.setState({
        count: this.state.seconds === 1? this.state.count + 1 : null,
        seconds: this.state.seconds === 0 && this.state.minutes === 0? 0 : this.state.seconds === 0 && this.state.minutes > 0? 59 : this.state.seconds - 1,
        minutes: this.state.minutes === 0 && this.state.seconds === 0 && !this.state.type
            ? this.state.breakLength
            : this.state.minutes === 0 && this.state.seconds === 0 && this.state.type
                ? this.state.sessionLength
                : this.state.minutes === 0 && this.state.seconds > 0
                ? 0 
                : this.state.minutes - this.state.count,
        type: this.state.minutes === 0 && this.state.seconds === 1? !this.state.type : this.state.type
    }), 1000);
  }
  stopCountdown = () => {
      this.setState({
          isOn: false,
      })
      clearInterval(this.timer)
  }
  resetCountdown = () => {
      this.setState({
        minutes: 25, 
        seconds: 0,
        breakLength: 5,
        sessionLength: 25,
        isOn: false,
        count: 1,
        type: true
      })
      clearInterval(this.timer)
  }
  buzzer = () => {
    this.audioBeep = new Audio(this.props.src);
    if (this.state.minutes === 0 && this.state.seconds === 1)
    this.audioBeep.play();
  }
breakArrowUp = () => {
    this.setState({
      breakLength: this.state.breakLength < 60? this.state.breakLength + 1 : this.state.breakLength
    })
}
breakArrowDown = () => {
  this.setState({
    breakLength: this.state.breakLength > 1? this.state.breakLength - 1 : 1
  })
}
sessionArrowDown = () => {
  this.setState({
      sessionLength: this.state.isOn? this.state.sessionLength : this.state.sessionLength > 1? this.state.sessionLength - 1: this.state.sessionLength,
      minutes: this.state.isOn? this.state.minutes : this.state.sessionLength > 1? this.state.sessionLength - 1 : 1,
      seconds: this.state.isOn? this.state.seconds : 0,
      count: 1
  })
}
sessionArrowUp = () => {
  this.setState({
      sessionLength: this.state.isOn? this.state.sessionLength : this.state.sessionLength < 60? this.state.sessionLength + 1: this.state.sessionLength,
      minutes: this.state.isOn? this.state.minutes : this.state.sessionLength < 60? this.state.sessionLength + 1: this.state.sessionLength,
      seconds: this.state.isOn? this.state.seconds : 0,
      count: 1
  })
}
    render() {
        const {breakLength, sessionLength, minutes, seconds} = this.state; 
        let fontColor = this.state.minutes >= 1? "black" : "red";
        return ( 
            <React.Fragment>
                <div className="container-fluid p-0 text-center w-100">
                    <h1 className="text-center p-2">25 + 5 Clock</h1>
                    <div className="container text-center w-50">
                    <div className="row">
                        <h3 id="break-label" className="col text-center p-2">Break Length</h3>
                        <h3 id="session-label" className="col text-center p-2">Session Length</h3>
                    </div>
                    </div>
                    <div className="container text-center w-50">
                        <div className="row">
                        <div className="col">
                            <button id="break-decrement" className="btn" onClick={this.breakArrowDown}><i className="fas fa-arrow-circle-down"></i></button>
                            <span id="break-length" className="m-2">{breakLength}</span>
                            <button id="break-increment" className="btn" onClick={this.breakArrowUp}><i className="fas fa-arrow-circle-up"></i></button>
                        </div>
                        <div className="col">
                            <button id="session-decrement" className="btn" onClick={this.sessionArrowDown}><i className="fas fa-arrow-circle-down"></i></button>
                            <span id="session-length" className="m-2">{sessionLength}</span>
                            <button id="session-increment" className="btn" onClick={this.sessionArrowUp}><i className="fas fa-arrow-circle-up"></i></button>
                        </div>
                        </div>
                    </div>
                    <div className="container text-center border rounded w-25 p-2" style={{color: fontColor}}>
                    <h4 id="timer-label">{this.state.type? "Session" : "Break"}</h4>
                        <span id="time-left">{`${minutes >= 10? minutes : "0" + minutes}:${seconds >= 10? seconds : "0" + seconds}`}</span>
                    </div>
                    <div className="container text-center w-25 p-2">
                        <button id="start_stop" className="btn" onClick={this.playStop()}><i className="fas fa-play"></i><i className="fas fa-pause"></i></button>
                        <button id="reset" className="btn" onClick={this.resetCountdown}><i className="fas fa-sync-alt"></i></button>
                    </div>
                    <audio id="beep" preload="auto"
        src="https://raw.githubusercontent.com/freeCodeCamp/cdn/master/build/testable-projects-fcc/audio/BeepSound.wav"></audio> 
                </div>
            </React.Fragment>
         );
    }
    playStop() {
        let func = this.state.isOn? this.stopCountdown : this.startCountdown;
        return func     
    }
}
 
export default Clock;```
尼拉帕特尔

您可以使用以下html标签来实现:

<audio controls autoplay>
  <source src="example.mp3" type="audio/mpeg">
</audio>

参考: https : //www.w3schools.com/tags/att_audio_autoplay.asp

或者,您可以使用npm模块咆哮

注意:确保在此处浏览浏览器的“自动播放策略”:

https://developer.mozilla.org/zh-CN/docs/Web/Media/Autoplay_guide

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在键盘按键上播放音频文件?

来自分类Dev

如何在键盘按键上播放音频文件?

来自分类Dev

如何使用javascript随机播放音频标签中的多个音频文件?

来自分类Dev

如何使用Matlab在特定间隔播放音频文件?

来自分类Dev

如何使用Matlab在特定间隔播放音频文件?

来自分类Dev

星号,如何播放音频文件

来自分类Dev

如何播放音频文件?

来自分类Dev

Smartface:如何播放音频文件?

来自分类Dev

如何播放音频文件?

来自分类Dev

如何在Android NDK中播放音频文件(任何格式)?

来自分类Dev

如何在Linux上使用交叉淡入淡出播放音频文件?

来自分类Dev

如何在不安装Real Audio Player的情况下播放.ram音频文件?

来自分类Dev

如何获取播放音频文件的音频路径?

来自分类Dev

如何获取播放音频文件的音频路径?

来自分类Dev

在上一个活动中单击某个按钮时如何播放音频文件

来自分类Dev

如何在音频单元扩展(实时过程)中分配内存以播放音频文件?

来自分类Dev

如何在不使用FormData的情况下在Ajax调用中添加文件数据?

来自分类Dev

如何在不使用IDM下载的情况下在Firefox中查看pdf文件

来自分类Dev

如何在不使用 fseek 或 stat 的情况下在 C 中获取文件大小?

来自分类Dev

如何在不使用JSX的情况下在React Native中制作组件?

来自分类Dev

如何在不使用其他库的情况下在React组件中编写内联CSS?

来自分类Dev

如何从跨平台的Haskell代码播放音频文件

来自分类Dev

轻按时如何创建播放音频文件的通知?

来自分类Dev

如何填充ListView和播放音频文件

来自分类Dev

在Django应用中播放音频文件?

来自分类Dev

在WatchKit OS2中播放音频文件

来自分类Dev

无法在Vue Web应用中播放音频文件

来自分类Dev

在onclick事件中播放音频文件

来自分类Dev

在UITableView中播放音频文件不正确

Related 相关文章

  1. 1

    如何在键盘按键上播放音频文件?

  2. 2

    如何在键盘按键上播放音频文件?

  3. 3

    如何使用javascript随机播放音频标签中的多个音频文件?

  4. 4

    如何使用Matlab在特定间隔播放音频文件?

  5. 5

    如何使用Matlab在特定间隔播放音频文件?

  6. 6

    星号,如何播放音频文件

  7. 7

    如何播放音频文件?

  8. 8

    Smartface:如何播放音频文件?

  9. 9

    如何播放音频文件?

  10. 10

    如何在Android NDK中播放音频文件(任何格式)?

  11. 11

    如何在Linux上使用交叉淡入淡出播放音频文件?

  12. 12

    如何在不安装Real Audio Player的情况下播放.ram音频文件?

  13. 13

    如何获取播放音频文件的音频路径?

  14. 14

    如何获取播放音频文件的音频路径?

  15. 15

    在上一个活动中单击某个按钮时如何播放音频文件

  16. 16

    如何在音频单元扩展(实时过程)中分配内存以播放音频文件?

  17. 17

    如何在不使用FormData的情况下在Ajax调用中添加文件数据?

  18. 18

    如何在不使用IDM下载的情况下在Firefox中查看pdf文件

  19. 19

    如何在不使用 fseek 或 stat 的情况下在 C 中获取文件大小?

  20. 20

    如何在不使用JSX的情况下在React Native中制作组件?

  21. 21

    如何在不使用其他库的情况下在React组件中编写内联CSS?

  22. 22

    如何从跨平台的Haskell代码播放音频文件

  23. 23

    轻按时如何创建播放音频文件的通知?

  24. 24

    如何填充ListView和播放音频文件

  25. 25

    在Django应用中播放音频文件?

  26. 26

    在WatchKit OS2中播放音频文件

  27. 27

    无法在Vue Web应用中播放音频文件

  28. 28

    在onclick事件中播放音频文件

  29. 29

    在UITableView中播放音频文件不正确

热门标签

归档