// 组件调用 <Audio src={src地址} id={srcID}/>
audio属性
@H_502_12@src 歌曲的路径
@H_502_12@loop 音频循环
@H_502_12@currentTime 音频当前播放时间
@H_502_12@duration 音频总长度
@H_502_12@ended 音频是否结束
@H_502_12@muted 音频静音为true
@H_502_12@volume 当前音频音量
@H_502_12@readyState 音频当前的就绪状态
audio事件
@H_502_12@abort 当音频/视频的加载已放弃时
@H_502_12@canplay 当浏览器可以播放音频/视频时
@H_502_12@canplaythrough 当浏览器可在不因缓冲而停顿的情况下进行播放时
@H_502_12@durationchange 当音频/视频的时长已更改时
@H_502_12@emptied 当目前的播放列表为空时
@H_502_12@ended 当目前的播放列表已结束时
@H_502_12@loadeddata 当浏览器已加载音频/视频的当前帧时
@H_502_12@loadstart 当浏览器开始查找音频/视频时
@H_502_12@pause 当音频/视频已暂停时
@H_502_12@play 当音频/视频已开始或不再暂停时
@H_502_12@playing 当音频/视频在已因缓冲而暂停或停止后已就绪时
@H_502_12@progress 当浏览器正在下载音频/视频时
@H_502_12@ratechange 当音频/视频的播放速度已更改时
@H_502_12@timeupdate 当目前的播放位置已更改时
@H_502_12@volumechange 当音量已更改时
@H_502_12@waiting 当视频由于需要缓冲下一帧而停止
组件结构
<div className="audioBox"> <audio id={`audio${id}`} src={src} preload={true} onCanPlay={() => this.controlAudio('allTime')} onTimeUpdate={(e) => this.controlAudio('getCurrentTime')} > 您的浏览器不支持 audio 标签。 </audio> <i className={isPlay ? 'pause' : 'play'} onClick={() => this.controlAudio(isPlay ? 'pause' : 'play')} /> <span className="current"> {this.millisecondToDate(currentTime)+'/'+this.millisecondToDate(allTime)} </span> <input type="range" className="time" step="0.01" max={allTime} value={currentTime} onChange={(value) => this.controlAudio('changeCurrentTime',value)} /> <i className={isMuted ? 'mute' : 'nomute'} onClick={() => this.controlAudio('muted')} /> <input type="range" className="volume" onChange={(value) => this.controlAudio('changeVolume',value)} value={isMuted ? 0 : volume} /> </div>
组件javascript
constructor(props) { super(props) this.state = { isPlay: false,isMuted: false,volume: 100,allTime: 0,currentTime: 0 } } millisecondToDate(time) { const second = Math.floor(time % 60) let minite = Math.floor(time / 60) // let hour // if(minite > 60) { // hour = minite / 60 // minite = minite % 60 // return `${Math.floor(hour)}:${Math.floor(minite)}:${Math.floor(second)}` // } return `${minite}:${second >= 10 ? second : `0${second}`}` } controlAudio(type,value) { const { id,src } = this.props const audio = document.getElementById(`audio${id}`) switch(type) { case 'allTime': this.setState({ allTime: audio.duration }) break case 'play': audio.play() this.setState({ isPlay: true }) break case 'pause': audio.pause() this.setState({ isPlay: false }) break case 'muted': this.setState({ isMuted: !audio.muted }) audio.muted = !audio.muted break case 'changeCurrentTime': this.setState({ currentTime: value }) audio.currentTime = value if(value == audio.duration) { this.setState({ isPlay: false }) } break case 'getCurrentTime': this.setState({ currentTime: audio.currentTime }) if(audio.currentTime == audio.duration) { this.setState({ isPlay: false }) } break case 'changeVolume': audio.volume = value / 100 this.setState({ volume: value,isMuted: !value }) break } }原文链接:https://www.f2er.com/react/305299.html