Skip to content

Commit 72f668e

Browse files
committed
[5.4.3] Optimization: giving a fake currentTime while sliding playing progress
1 parent f82f505 commit 72f668e

11 files changed

Lines changed: 39 additions & 14 deletions

File tree

dist/assets/muse-player-preact.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/assets/muse-player-react-lite.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/assets/muse-player.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/example.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "muse-player",
3-
"version": "5.4.2",
3+
"version": "5.4.3",
44
"description": "Just a simple and dilligent HTML5 Audio Player written in React.",
55
"main": "dist/assets/muse-player.js",
66
"scripts": {

src/components/Progress.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class Progress extends Component {
1717
};
1818

1919
id = undefined;
20+
finalProgress = undefined;
2021

2122
constructor(props) {
2223
super(props);
@@ -56,9 +57,13 @@ class Progress extends Component {
5657
const rect = getRect(this.progress),
5758
target = event.clientX,
5859
width = this.progress.offsetWidth;
59-
this.props.store.slideProgress(Number((target - rect.left) / width * duration));
60+
61+
this.finalProgress = Math.max(Number((target - rect.left) / width * duration), 0);
62+
this.props.store.slideTimeOnly(this.finalProgress);
6063
};
6164
onHandlerMouseUp = () => {
65+
this.props.store.slideProgress(this.finalProgress);
66+
6267
document.body.removeEventListener('mousemove', this.onHandlerDrag);
6368
document.body.removeEventListener('mouseup', this.onHandlerMouseUp);
6469
};
@@ -72,9 +77,12 @@ class Progress extends Component {
7277
const rect = getRect(this.progress),
7378
target = event.touches[0].clientX,
7479
width = this.progress.offsetWidth;
75-
this.props.store.slideProgress(Number((target - rect.left) / width * duration));
80+
81+
this.finalProgress = Math.max(Number((target - rect.left) / width * duration), 0);
82+
this.props.store.slideTimeOnly(this.finalProgress);
7683
};
7784
onHandlerTouchEnd = () => {
85+
this.props.store.slideProgress(this.finalProgress);
7886
document.body.removeEventListener('touchmove', this.onHandlerTouchMove);
7987
document.body.removeEventListener('touchend', this.onHandlerMouseUp);
8088
};

src/config/base.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
// Settings configured here will be merged into the final config object.
44
export default {
5-
MUSE_VERSION: '5.4.2'
5+
MUSE_VERSION: '5.4.3'
66
}

src/containers/ControlContainer.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ export default class ControlContainer extends Component {
2222

2323
/* store subscribers */
2424
subscriber = () => {
25-
const { store } = this.props,
25+
const { store, parent } = this.props,
2626
{ audio } = this,
27-
{ currentTime, volume, playRate } = store;
27+
{ currentTime, timeSlider, volume, playRate } = store;
2828
// toggle play
2929
if (!audio.paused != store.isPlaying) {
3030
if (store.isPlaying) {
@@ -35,9 +35,21 @@ export default class ControlContainer extends Component {
3535
return;
3636
}
3737
// slide progress
38+
if (timeSlider != undefined) {
39+
// remove listener
40+
this.audio.removeEventListener('timeupdate', this.onAudioTimeUpdate);
41+
// update parent state with a virtual ptime
42+
parent.setState({
43+
...parent.state,
44+
currentTime: timeSlider
45+
});
46+
store.slideTimeOnly(undefined);
47+
}
3848
if (currentTime != undefined) {
3949
audio.currentTime = currentTime;
4050
store.slideProgress(undefined); // reset state
51+
// rebind listener
52+
this.audio.addEventListener('timeupdate', this.onAudioTimeUpdate);
4153
}
4254
// change volume
4355
audio.volume = volume;

src/example.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/models/PlayerModel.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export default class PlayerModel {
1515
@observable playRate = 1;
1616
@observable duration = undefined;
1717
@observable currentTime = 0;
18+
@observable timeSlider = undefined;
1819
@observable currentPanel = 'lyric';
1920

2021
@observable currentMusicIndex = 0;
@@ -109,6 +110,11 @@ export default class PlayerModel {
109110
return (this.currentTime = progress);
110111
}
111112

113+
@action
114+
slideTimeOnly(progress) {
115+
return (this.timeSlider = progress);
116+
}
117+
112118
@action
113119
setCurrentMusic(index) {
114120
this.currentMusicIndex = index;

0 commit comments

Comments
 (0)