Поскольку у вас есть атрибут autoplay
, использование события onplay
должно работать в этом случае.Я изменил ваш исходный пример, чтобы продемонстрировать:
componentDidMount() {
this.setState({isLoading: true})
}
render() {
const { isLoading } = this.state;
return (
<React.Fragment>
{isLoading && <CircularProgress />}
<video
loop
muted
autoPlay
src={WaveVideo}
preload={'auto'}
type={'video/mp4'}
className={classes.video}
ref={ref => this.headerVideo}
onLoadEnd={() => this.setState({isLoading: false})}>
</video>
</React.Fragment>
);
}
Так что, когда этот компонент будет создан, он запустит функцию жизненного цикла componentDidMount
, чтобы установить начальное состояние индикатора загрузки, в результате чего счетчик будет отображаться рядом сзагрузка видео.Затем мы сбрасываем состояние индикатора загрузки, когда видео начинает воспроизводиться само по себе, что приводит к тому, что спиннер больше не рендерится.
РЕДАКТИРОВАТЬ:
С тех пор я узнал, что событиевы связываете в своем примере onloadeddata
"запускается, когда первый кадр носителя завершил загрузку".Это аккуратно объясняет, почему вы видели, как оба события запускаются одновременно.Событие, которое вы намеревались использовать, было на самом деле onloadend
.Я включил его в приведенный выше пример, заменив оригинальный обработчик onplay
.