From 1d4653a5617d0e7fcb4591a77a46c386e1ddf40d Mon Sep 17 00:00:00 2001 From: dushixiang <798148596@qq.com> Date: Tue, 19 Jan 2021 23:18:52 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BE=8E=E5=8C=96=E4=BC=9A=E8=AF=9D=E5=9B=9E?= =?UTF-8?q?=E6=94=BE=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/session/OfflineSession.js | 1 + web/src/components/session/Playback.js | 127 ++++++++++++------- 2 files changed, 85 insertions(+), 43 deletions(-) diff --git a/web/src/components/session/OfflineSession.js b/web/src/components/session/OfflineSession.js index d923d09..9b88168 100644 --- a/web/src/components/session/OfflineSession.js +++ b/web/src/components/session/OfflineSession.js @@ -475,6 +475,7 @@ class OfflineSession extends Component { /> , + playPauseIconTitle: '播放', + recording: undefined, + percent: 0, + max: 0, + } + componentDidMount() { let sessionId = this.props.sessionId; this.initPlayer(sessionId); @@ -16,12 +29,7 @@ class Playback extends Component { initPlayer(sessionId) { var RECORDING_URL = `${server}/sessions/${sessionId}/recording`; - var player = document.getElementById('player'); var display = document.getElementById('display'); - var playPause = document.getElementById('play-pause'); - var position = document.getElementById('position'); - var positionSlider = document.getElementById('position-slider'); - var duration = document.getElementById('duration'); var tunnel = new Guacamole.StaticHTTPTunnel(RECORDING_URL); var recording = new Guacamole.SessionRecording(tunnel); @@ -87,22 +95,25 @@ class Playback extends Component { recording.connect(); // If playing, the play/pause button should read "Pause" - recording.onplay = function () { - playPause.textContent = 'Pause'; + recording.onplay = () => { + // 暂停 + this.setState({ + playPauseIcon: , + playPauseIconTitle: '暂停', + }) }; // If paused, the play/pause button should read "Play" - recording.onpause = function () { - playPause.textContent = 'Play'; + recording.onpause = () => { + // 播放 + this.setState({ + playPauseIcon: , + playPauseIconTitle: '播放', + }) }; // Toggle play/pause when display or button are clicked - display.onclick = playPause.onclick = function () { - if (!recording.isPlaying()) - recording.play(); - else - recording.pause(); - }; + display.onclick = this.handlePlayPause; // Fit display within containing div recordingDisplay.onresize = function displayResized(width, height) { @@ -113,36 +124,59 @@ class Playback extends Component { // Scale display to fit width of container recordingDisplay.scale(display.offsetWidth / width); - }; - // Update slider and status when playback position changes - recording.onseek = function positionChanged(millis) { - position.textContent = formatTime(millis); - positionSlider.value = millis; + recording.onseek = (millis) => { + this.setState({ + percent: millis, + position: formatTime(millis) + }) }; - // Update slider and status when duration changes - recording.onprogress = function durationChanged(millis) { - duration.textContent = formatTime(millis); - positionSlider.max = millis; + recording.onprogress = (millis) => { + this.setState({ + max: millis, + duration: formatTime(millis) + }) }; - // Seek within recording if slider is moved - positionSlider.onchange = function sliderPositionChanged() { + this.setState({ + recording: recording + }) + } + handlePlayPause = () => { + let recording = this.state.recording; + if (recording) { + if (this.state.percent === this.state.max) { + // 重播 + console.log('重新播放') + this.setState({ + percent: 0 + }, () => { + recording.seek(0, () => { + recording.play(); + }); + }); + } + + if (!recording.isPlaying()) { + recording.play(); + } else { + recording.pause(); + } + } + } + + handleProgressChange = (value) => { + let recording = this.state.recording; + if (recording) { // Request seek - recording.seek(positionSlider.value, function seekComplete() { - - // Seek has completed - player.className = ''; - + recording.seek(value, () => { + console.log('complete'); }); + } - // Seek is in progress - player.className = 'seeking'; - - }; } render() { @@ -157,14 +191,21 @@ class Playback extends Component { -
- - - 00:00 - / - 00:00 -
- + + + +