【发布时间】:2020-05-24 13:16:42
【问题描述】:
我有一个显示video 元素的应用。
我希望用户能够点击一个按钮并观看另一个视频。然而,在更改 src 属性时,在渲染下一个 mp4 时会出现轻微的白色闪烁。
为了解决这个问题,我认为我需要加载一个,预加载另一个并在准备好时更改它们。
我不确定如何在 React 中执行此操作。
import React, { Component } from 'react';
import './App.css'
import one from './one.mp4';
import two from './two.mp4';
import three from './three.mp4';
import four from './four.mp4';
class App extends Component {
playlist = [one, two, three, four]
shuffle = (array) => array.sort(() => Math.random() - 0.5);
getRandomVideo = () => this.shuffle(this.playlist)[Math.floor(Math.random() * this.playlist.length)]
state = {
playerOne: {
isVisible: true,
inputSrc: this.getRandomVideo()
},
playerTwo: {
isVisible: false,
inputSrc: this.getRandomVideo()
}
}
onTap = () => this.setState(prevState => ({
playerOne: {
isVisible: !prevState.playerOne.isVisible,
inputSrc: this.getRandomVideo()
},
playerTwo: {
isVisible: !prevState.playerTwo.isVisible,
inputSrc: this.getRandomVideo()
}
}));
render() {
const { playerOne, playerTwo } = this.state
return (
<div>
<div className="outer">
<button onClick={this.onTap}>Toggle</button>
{playerOne.isVisible && <VideoPlayer src={playerOne.inputSrc} /> }
{playerTwo.isVisible && <VideoPlayer src={playerTwo.inputSrc} /> }
</div>
</div>
)
}
}
export default App
const VideoPlayer = ({ src }) => {
return (
<video key={src} preload autoPlay loop muted><source src={src} type='video/mp4' /></video>
)
}
【问题讨论】:
标签: javascript html reactjs html5-video