mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2025-11-03 04:50:14 +08:00
89 lines
2.3 KiB
JavaScript
89 lines
2.3 KiB
JavaScript
import React from "react";
|
|
|
|
import { Container, Icon, NgIf } from "./";
|
|
import "./audio.scss";
|
|
|
|
export class Audio extends React.Component {
|
|
constructor(props){
|
|
super(props);
|
|
this.state = {
|
|
percent: 0,
|
|
state: "play"
|
|
};
|
|
}
|
|
|
|
componentDidMount(){
|
|
requestAnimationFrame(() => {
|
|
if(this.state.state === "play"){
|
|
if(this.state.percent < 100){
|
|
this.setState({percent: this.state.percent + 0.1}, this.componentDidMount);
|
|
}else{
|
|
this.setState({percent: 0}, this.componentDidMount);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
onStateChange(new_state){
|
|
this.setState({state: new_state});
|
|
}
|
|
|
|
render(){
|
|
return (
|
|
<div className="component_audio">
|
|
<Container maxWidth={700}>
|
|
<div style={{display: "flex"}}>
|
|
<Control state={this.state.state} onPlay={this.onStateChange.bind(this, "play")} onPause={this.onStateChange.bind(this, "pause")}/>
|
|
<Progress purcent={this.state.percent} />
|
|
<Volume />
|
|
<TrackInfo name="Cloudkicker - Let Yourself Be Huge - Explore, be curious" />
|
|
</div>
|
|
</Container>
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
const Volume = () => {
|
|
return (
|
|
<div className="component_volume">
|
|
VOLUME
|
|
<div className="volume-controller-wrapper">
|
|
<div className="volume-controller">s</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
const Control = (props) => {
|
|
return (
|
|
<div className="component_control">
|
|
<NgIf cond={props.state === "pause"} type="inline">
|
|
<Icon name="play" onClick={props.onPlay}/>
|
|
</NgIf>
|
|
<NgIf cond={props.state === "play"} type="inline">
|
|
<Icon name="pause" onClick={props.onPause}/>
|
|
</NgIf>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
const Progress = (props) => {
|
|
return (
|
|
<div className="component_progress">
|
|
<div className="placeholder"></div>
|
|
<div className="progress-bar" style={{width: props.purcent+"%"}}></div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
const TrackInfo = (props) => {
|
|
return (
|
|
<div className="component_trackinfo">
|
|
<div>
|
|
{props.name}
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|