import React, { Component } from 'react'; import './index.less'; import videojs from 'video.js'; import Assets from '@src/components/Assets'; import { generateUUID } from '@src/services/Tools'; function fullScreen(id) { const element = document.getElementById(id); if (element.requestFullscreen) { element.requestFullscreen(); } else if (element.msRequestFullscreen) { element.msRequestFullscreen(); } else if (element.mozRequestFullScreen) { element.mozRequestFullScreen(); } else if (element.webkitRequestFullscreen) { element.webkitRequestFullscreen(); } } function exitFullscreen() { if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.msExitFullscreen) { document.msExitFullscreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.webkitExitFullscreen) { document.webkitExitFullscreen(); } } let fullAgent = null; document.addEventListener('fullscreenchange', () => { if (fullAgent) fullAgent(); }); /* Firefox */ document.addEventListener('mozfullscreenchange', () => { if (fullAgent) fullAgent(); }); /* Chrome, Safari and Opera */ document.addEventListener('webkitfullscreenchange', () => { if (fullAgent) fullAgent(); }); /* IE / Edge */ document.addEventListener('msfullscreenchange', () => { if (fullAgent) fullAgent(); }); export default class Video extends Component { constructor(props) { super(props); this.ready = false; this.state = { id: generateUUID(8), playing: false, fulling: false }; } componentDidMount() { this.player = videojs( this.videoNode, { controls: false, sources: [ { src: this.props.src, type: 'video/mp4', }, ], }, () => { this.ready = true; }, ); } componentWillUnmount() { if (this.player) { this.player.dispose(); } } refreshTimeUpdate() { if (this.timeInterval) { clearInterval(this.timeInterval); this.timeInterval = null; } this.timeInterval = setInterval(() => { const { onTimeUpdate } = this.props; if (onTimeUpdate) onTimeUpdate(this.player.currentTime()); }, this.props.duration ? this.props.duration * 1000 : 1000); } onPlay() { if (!this.ready) return; const { onPlay } = this.props; this.player.play(); this.setState({ playing: true }); if (onPlay) onPlay(); } onPause() { if (!this.ready) return; const { onPause } = this.props; this.player.pause(); this.setState({ playing: false }); if (onPause) onPause(); } onNext() { const { onNext } = this.props; this.player.pause(); this.setState({ playing: false }); if (onNext) onNext(); } onSpeed(speed) { this.player.playbackRate(speed); } onFullChange() { this.setState({ fulling: !this.state.fulling }); if (this.props.onFullChange) this.props.onFullChange(); } onFull() { fullAgent = () => this.onFullChange(); fullScreen(this.state.id); } onExitFull() { exitFullscreen(); } render() { const { action = true, btnList = [], children, onAction, hideAction } = this.props; const { playing, fulling, id } = this.state; return (