Элемент React video не приостанавливается

javascript #reactjs #html5-video

#javascript #reactjs #html5-видео

Вопрос:

Привет, я пытался создать видеопроигрыватель в react и хотел создать свои собственные элементы управления, но столкнулся с проблемой. функция handlePlay OnClick должна воспроизводить или приостанавливать видео. isPlaying — это состояние для отслеживания команды пользователя (isPlaying инициализируется значением true), но даже когда состояние обновляется, видео не приостанавливается.Кто -нибудь может помочь Thnx

 class Video extends React.Component {
  constructor(...args) {
    super(...args);
    const video = document.createElement("video");
    video.src = Vid;
    video.type = "video/mp4";
 
    this.state = {
      video: video,
      timestamps: [],
      isPlaying: true,
    };

    video.addEventListener("canplay", () => {
      if (this.state.isPlaying === true) {
        console.log("play");
        video.play();
        //this.image.getLayer().batchDraw();
       // this.requestUpdate();
      } else {
        console.log("pause");
        video.pause();
        //this.image.getLayer().batchDraw();
        //this.requestUpdate();
      }
    });
  }

  handlePlay = () => {
 
    if (this.state.isPlaying === true) {
      this.setState({
        isPlaying: false,
      });
    } else {
      this.setState({
        isPlaying: true,
      });
    }
  };
 

Ответ №1:

Сначала вы должны использовать render метод компонента React для рендеринга вашего видео, а затем подключить правильные обработчики onClick для воспроизведения / приостановки с помощью пользовательского элемента управления. Код будет выглядеть примерно так:

 import React, { Component } from "react";

export default class Video extends Component {
  constructor(props) {
    super(props);
    this.state = {
      timestamps: [],
      isPlaying: true
    };
  }

  videoRef = React.createRef();

  handlePlay = () => {
    if (this.state.isPlaying === true) {
      this.videoRef.current.pause();
      this.setState({
        isPlaying: false
      });
    } else {
      this.videoRef.current.play();
      this.setState({
        isPlaying: true
      });
    }
  };

  render() {
    return (
      <>
        <video
          ref={this.videoRef}
          autoPlay
          src="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
        />
        <button type="button" onClick={this.handlePlay}>
          Control
        </button>
      </>
    );
  }
}
 

Я создал фиктивную кнопку для эмуляции вашего элемента управления.
Необходимо videoRef сохранить ссылку на видеоэлемент, которая назначается ему с ref помощью свойства и доступна как videoRef.current . Вы можете узнать больше о ссылках в официальных документах React.

Вы можете найти рабочий пример в следующей изолированной среде кода.