change <audio> src with javascript

后端 未结 6 1619
离开以前
离开以前 2020-11-27 04:52

I have multiple audio files that I want to stream based on the user selects. How do I do that? This is what I have so far and it doesn\'t seem to work.

*UPDATE: Mad

6条回答
  •  忘掉有多难
    2020-11-27 05:23

    Here is how I did it using React and CJSX (Coffee JSX) based on Vitim.us solution. Using componentWillReceiveProps I was able to detect every property changes. Then I just check whether the url has changed between the future props and the current one. And voilà.

    @propTypes =
        element: React.PropTypes.shape({
             version: React.PropTypes.number
             params:
                 React.PropTypes.shape(
                     url: React.PropTypes.string.isRequired
                     filename: React.PropTypes.string.isRequired
                     title: React.PropTypes.string.isRequired
                     ext: React.PropTypes.string.isRequired
                 ).isRequired
         }).isRequired
    
    componentWillReceiveProps: (nextProps) ->
        element = ReactDOM.findDOMNode(this)
        audio = element.querySelector('audio')
        source = audio.querySelector('source')
    
        # When the url changes, we refresh the component manually so it reloads the loaded file
        if nextProps.element.params?.filename? and
        nextProps.element.params.url isnt @props.element.params.url
            source.src = nextProps.element.params.url
            audio.load()
    

    I had to do it this way, because even a change of state or a force redraw didn't work.

提交回复
热议问题