Skip to content

Commit 3cc1e69

Browse files
committed
Add audio element event props
1 parent 675356a commit 3cc1e69

File tree

4 files changed

+99
-7
lines changed

4 files changed

+99
-7
lines changed

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,14 @@ const Player = () => {
5858
| **`autoplay`** | Sets a value indicating what data should be preloaded, if any. Allowed values `""`, `"none"`, `"metadata"`, `"auto"` | `""` | Yes |
5959
| **`playbackRate`** | Sets the rate at which media is being played back | `1.0` | Yes |
6060
---
61-
## Audio player props props
61+
<br>
62+
63+
## Audio element events
64+
#### `AudioPlayer` supports all the events for `HTMLMediaElement` ([MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#events)). All of the events listed in the MDN docs can be passed as a prop to the `AudioPlayer`
65+
---
66+
<br>
67+
68+
## Audio player props
6269
| Props | Description | Default | Optional |
6370
| :------------ |:--------------- |:--------------- | :--------------- |
6471
| **`minimal`** | Displays a minimal version of the audio player, with only the play/pause button, track bar and timestamp | `false` | Yes |
@@ -78,3 +85,4 @@ const Player = () => {
7885
| **`volumeControlColor`** | Color for the volumn control | `rgba(140, 140, 140)` | Yes |
7986
| **`hideSeekBar`** | Hides the seek bar if set to `true`, the audio will still be seekable | `false` | Yes |
8087
| **`hideSeekKnobWhenPlaying`** | Hides the seek knob when audio is playing if set to `true` | `false` | Yes |
88+

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,35 @@
11
{
22
"name": "react-audio-player-component",
33
"private": false,
4-
"version": "1.0.1",
4+
"version": "1.1.0",
55
"license": "MIT",
66
"author": "",
77
"repository": {
88
"type": "git",
99
"url": "https://github.com/samhirtarif/react-audio-player.git"
1010
},
1111
"keywords": [
12+
"react",
13+
"reactjs",
14+
"react-audio-player",
15+
"react-audio-playback",
16+
"react-voice-player",
17+
"react-voice-playback",
18+
"react-audio-player-component",
19+
"react audio player",
20+
"react audio playback",
21+
"react voice player",
22+
"react voice playback",
1223
"audio",
1324
"voice",
1425
"player",
1526
"audio player",
1627
"audio playback",
1728
"voice player",
18-
"voice playback"
29+
"voice playback",
30+
"media",
31+
"media-player",
32+
"media player"
1933
],
2034
"files": [
2135
"dist"

src/components/AudioPlayer.tsx

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,34 @@ interface AudioElementNativeProps {
4343
* Sets the rate at which media is being played back. Defaults to `1.0`
4444
*/
4545
playbackRate?: number;
46+
}
4647

48+
interface AudioElementEventProps {
49+
onabort?: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;
50+
oncanplay?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
51+
oncanplaythrough?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
52+
ondurationchange?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
53+
onemptied?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
54+
onended?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
55+
onerror?: OnErrorEventHandler | null;
56+
onloadeddata?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
57+
onloadedmetadata?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
58+
onloadstart?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
59+
onpause?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
60+
onplay?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
61+
onplaying?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
62+
onprogress?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
63+
onratechange?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
64+
onseeked?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
65+
onseeking?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
66+
onstalled?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
67+
onsuspend?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
68+
ontimeupdate?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
69+
onvolumechange?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
70+
onwaiting?: ((this: GlobalEventHandlers, ev: Event) => any) | null;
4771
}
4872

4973
interface AudioPlayerProps {
50-
5174
/**
5275
* Displays a minimal version of the audio player, with only the play/pause button, track bar and timestamp. Defaults to `false`
5376
*/
@@ -118,7 +141,9 @@ interface AudioPlayerProps {
118141
hideSeekKnobWhenPlaying?: boolean;
119142
}
120143

121-
const AudioPlayer: React.FC<AudioElementNativeProps & AudioPlayerProps> = ({
144+
const AudioPlayer: React.FC<
145+
AudioElementNativeProps & AudioElementEventProps & AudioPlayerProps
146+
> = ({
122147
// native props
123148
src,
124149
loop = false,
@@ -128,6 +153,29 @@ const AudioPlayer: React.FC<AudioElementNativeProps & AudioPlayerProps> = ({
128153
crossOrigin = null,
129154
preload = "",
130155
playbackRate = 1.0,
156+
// audio element events
157+
onabort = null,
158+
oncanplay = null,
159+
oncanplaythrough = null,
160+
ondurationchange = null,
161+
onemptied = null,
162+
onended = null,
163+
onerror = null,
164+
onloadeddata = null,
165+
onloadedmetadata = null,
166+
onloadstart = null,
167+
onpause = null,
168+
onplay = null,
169+
onplaying = null,
170+
onprogress = null,
171+
onratechange = null,
172+
onseeked = null,
173+
onseeking = null,
174+
onstalled = null,
175+
onsuspend = null,
176+
ontimeupdate = null,
177+
onvolumechange = null,
178+
onwaiting = null,
131179
// Audio player props
132180
minimal = false,
133181
width,
@@ -168,6 +216,28 @@ const AudioPlayer: React.FC<AudioElementNativeProps & AudioPlayerProps> = ({
168216
audio.crossOrigin = crossOrigin;
169217
audio.preload = preload;
170218
audio.playbackRate = playbackRate;
219+
audio.onabort = onabort;
220+
audio.oncanplay = oncanplay;
221+
audio.oncanplaythrough = oncanplaythrough;
222+
audio.ondurationchange = ondurationchange;
223+
audio.onemptied = onemptied;
224+
audio.onended = onended;
225+
audio.onerror = onerror;
226+
audio.onloadeddata = onloadeddata;
227+
audio.onloadedmetadata = onloadedmetadata;
228+
audio.onloadstart = onloadstart;
229+
audio.onpause = onpause;
230+
audio.onplay = onplay;
231+
audio.onplaying = onplaying;
232+
audio.onprogress = onprogress;
233+
audio.onratechange = onratechange;
234+
audio.onseeked = onseeked;
235+
audio.onseeking = onseeking;
236+
audio.onstalled = onstalled;
237+
audio.onsuspend = onsuspend;
238+
audio.ontimeupdate = ontimeupdate;
239+
audio.onvolumechange = onvolumechange;
240+
audio.onwaiting = onwaiting;
171241
setBlob(blob);
172242
return blob;
173243
})

0 commit comments

Comments
 (0)