Добре дошли в този урок за това как да създадете лента за зареждане, която показва текущото време на mp3 файл, който се възпроизвежда с React и Bootstrap. Ще използваме инструмента create-react-app, за да стартираме бързо React приложение. Ще използваме и библиотеката Bootstrap, за да стилизираме нашето приложение.
Да започваме!
- Първо отворете терминала/командния ред и въведете следната команда:
npx create-react-app my-app
Това ще създаде ново приложение React, наречено my-app
.
- След това отидете в директорията
my-app
и инсталирайте библиотеката Bootstrap.
npm install bootstrap
- Отидете във вашия
index.js
файл и импортирайте листовете със стилове на Bootstrap.
import 'bootstrap/dist/css/bootstrap.min.css';
- Сега създайте нов компонент, наречен
LoadingBar
във вашата папкаsrc
.
import React from 'react'; class LoadingBar extends React.Component { render() { return ( <div> // code goes here </div> ); } } export default LoadingBar;
- Сега ще създадем HTML за лентата за зареждане. Това ще включва аудио елемент, лента за напредъка и интервал за показване на текущото време.
<audio id="audio" src="sample.mp3" type="audio/mpeg"> Your browser does not support the audio element. </audio> <div className="progress"> <div className="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow={this.state.progress} aria-valuemin="0" aria-valuemax="100" style={{width: `${this.state.progress}%`}}> <span className="audio-time">{this.state.currentTime}</span> </div> </div>
- Сега ще добавим някакво състояние към нашия компонент. Ще ни трябват два елемента:
progress
иcurrentTime
.
constructor(props) { super(props); this.state = { progress: 0, currentTime: '0:00' }; }
- Сега ще добавим логиката за изчисляване на прогреса и текущото време на аудиото. Ще използваме събитието
ontimeupdate
на аудио елемента, за да извикаме функция всеки път, когато времето на аудиото се промени. След това тази функция ще актуализира състоянието на нашия компонент.
calculateProgress = () => { const audio = document.getElementById('audio'); const duration = audio.duration; const currentTime = audio.currentTime; const progress = (currentTime / duration) * 100; this.setState({ progress: progress, currentTime: this.getTime(currentTime) }); } getTime = (time) => { let minutes = Math.floor(time / 60); let seconds = Math.floor(time % 60); if (seconds < 10) { seconds = `0${seconds}`; } return `${minutes}:${seconds}`; } componentDidMount() { document.getElementById('audio').addEventListener('timeupdate', this.calculateProgress); }
- Накрая ще добавим компонента
LoadingBar
към нашия компонентApp
.
import LoadingBar from './LoadingBar'; class App extends React.Component { render() { return ( <div className="container"> <LoadingBar /> </div> ); } }
И това е! Вече имаме лента за зареждане, която показва текущото време на mp3 файл, който се възпроизвежда с React и Bootstrap.