Skip to content

Commit d6609e6

Browse files
committed
play only one audio in one moment
1 parent ccc6db3 commit d6609e6

File tree

5 files changed

+31
-1
lines changed

5 files changed

+31
-1
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ Demo http://ui.talk.ai/react-lite-audio/
1414

1515
### Supposition
1616

17+
* Only one piece of audio is playing at one moment.
18+
1719
### Usage
1820

1921
```bash
@@ -55,6 +57,7 @@ gulp build
5557
```
5658

5759
### Special notice
60+
5861
However there is a significant anomaly here in Opera, Safari and IE10, which is that the .paused flag remains false when the media has ended.
5962
You can see the problem [here](here)
6063

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
"classnames": "^2.1.3",
88
"flex.less": "^1.1.0",
99
"react": "^0.13.3",
10-
"volubile-ui": "^0.0.10"
10+
"volubile-ui": "^0.0.10",
11+
"wolfy87-eventemitter": "^4.3.0"
1112
},
1213
"devDependencies": {
1314
"cirru-script": "^0.2.3",

src/audio-slim.coffee

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
React = require 'react/addons'
22
cx = require 'classnames'
33

4+
bus = require './bus'
5+
46
div = React.createFactory 'div'
57
span = React.createFactory 'span'
68
audio = React.createFactory 'audio'
@@ -29,11 +31,13 @@ module.exports = React.createClass
2931
@_audioEl.addEventListener 'durationchange', @setDuration
3032
@_audioEl.addEventListener 'timeupdate', @updateProgress
3133
@_audioEl.addEventListener 'ended', @endProgress
34+
bus.on 'play', @onBusPlay
3235

3336
componentWillUnmount: ->
3437
@_audioEl.removeEventListener 'durationchange', @setDuration
3538
@_audioEl.removeEventListener 'timeupdate', @updateProgress
3639
@_audioEl.removeEventListener 'ended', @endProgress
40+
bus.off 'play', @onBusPlay
3741

3842
setDuration: ->
3943
# safari may get wrong duration
@@ -71,12 +75,19 @@ module.exports = React.createClass
7175

7276
playClick: ->
7377
if @_audioEl.paused
78+
bus.trigger 'play'
7479
@_audioEl.play()
7580
@setState pause: false, played: true
7681
else
7782
@_audioEl.pause()
7883
@setState pause: true, played: true
7984

85+
onBusPlay: (event) ->
86+
console.log 'on play event', event
87+
if not @state.paused
88+
@_audioEl.pause()
89+
@setState pause: true, played: true
90+
8091
render: ->
8192
src = @props.source
8293
duration = @state.duration

src/audio.coffee

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
React = require 'react/addons'
22
cx = require 'classnames'
33

4+
bus = require './bus'
5+
46
div = React.createFactory 'div'
57
span = React.createFactory 'span'
68
audio = React.createFactory 'audio'
@@ -29,11 +31,13 @@ module.exports = React.createClass
2931
@_audioEl.addEventListener 'durationchange', @setDuration
3032
@_audioEl.addEventListener 'timeupdate', @updateProgress
3133
@_audioEl.addEventListener 'ended', @endProgress
34+
bus.on 'play', @onBusPlay
3235

3336
componentWillUnmount: ->
3437
@_audioEl.removeEventListener 'durationchange', @setDuration
3538
@_audioEl.removeEventListener 'timeupdate', @updateProgress
3639
@_audioEl.removeEventListener 'ended', @endProgress
40+
bus.off 'play', @onBusPlay
3741

3842
setDuration: ->
3943
# safari may get wrong duration
@@ -71,12 +75,19 @@ module.exports = React.createClass
7175

7276
playClick: ->
7377
if @_audioEl.paused
78+
bus.trigger 'play'
7479
@_audioEl.play()
7580
@setState pause: false, played: true
7681
else
7782
@_audioEl.pause()
7883
@setState pause: true, played: true
7984

85+
onBusPlay: (event) ->
86+
console.log 'on play event', event
87+
if not @state.paused
88+
@_audioEl.pause()
89+
@setState pause: true, played: true
90+
8091
render: ->
8192
src = @props.source
8293
duration = @state.duration

src/bus.coffee

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
EventEmitter = require 'wolfy87-eventemitter'
3+
4+
module.exports = new EventEmitter

0 commit comments

Comments
 (0)