import './style.less' import classnames from 'classnames' import React from 'react' export interface Props { url: string isPad?: boolean className?: string duration?: number onClick?: () => void } enum Status { PLAY, STOP } interface State { status: Status } export default class AudioBlock extends React.Component { public audio: HTMLAudioElement | null = null public state: State = { status: Status.STOP } public clickHandler = () => { const { status } = this.state const { onClick } = this.props const audio = this.audio as HTMLAudioElement if (status === Status.PLAY) { audio.pause() this.setState({ status: Status.STOP }) } else { audio.currentTime = 0 audio.play() this.setState({ status: Status.PLAY }) } if (onClick) onClick() } public componentDidMount() { setTimeout(_ => { ;(this.audio as HTMLAudioElement).addEventListener('ended', () => { this.setState({ status: Status.STOP }) }) }, 0) } public render() { const { url, isPad, className, duration } = this.props return (
{duration !== undefined && `${duration}''`}
) } }