如何在 coffeescript 上创建音频 onended 事件

How to create audio onended event on coffeescript

我试图在音频以 coffeescript 结尾时调用一个函数,我在 javascript 中发送了代码,它运行良好,但在 coffeescript 中不行。

这是 coffeescript 上的完整代码。

play: () ->
    if (@getConfig "musicPath") != "../audioclips/backgroundmusics/"
      @pathtoMusic = @getConfig "musicPath"
    else
      @pathtoMusic = path.join(__dirname, @getConfig "musicPath")

    @musicFiles = fs.readdirSync(@pathtoMusic.toString())
    @music = new Audio(@pathtoMusic + @musicFiles[0])
    @music.volume = @getConfig "musicVolume"

    @isPlaying = false if (@music.paused)
    return null if @isPlaying

    @isPlaying = true
    @music.play()
    @music.onended = ->
        @music.play() //-----Here doesn't work------//

我正在使用 atom 文本编辑器朗读包中的 coffeescript 代码,并 chrome 朗读 javascript 代码。

更具体一点。我看到一个包在 atom 上使用 onended 事件,这是代码。

code-champion

'use babel';

epicVictory() {
      if (this.isPlaying) return
      console.log('Epic Victory!');
      let maxIndex = this.winFiles.length - 1
      let minIndex = 0
      let randomIndex = Math.floor(Math.random() * (maxIndex - minIndex + 1) + minIndex)
      this.audio = new Audio(this.winpath + this.winFiles[randomIndex])

      this.audio.onended = () => {
          this.audio.play() //-------here work-----//
          //this.isPlaying = false
      }

  this.isPlaying = true

  this.audio.volume = this.volume
  this.audio.play()
  return true
},

我使用在线转换器将 babel 代码转换为 javascript,我得到了这个。

babel to javascript

//imput
this.music.onended = () => {
    this.audio.play()
}

//ouput
this.music.onended = function () {
    this.music.play();
};

然后我将 javascript 代码转换为 coffeescript 编译器,我得到了这个。

javascript to coffeescript

//imput
this.music.onended = function () {
    this.autoPlay();
}

//ouput
@music.onended = ->
  @music.play()

但是代码只适用于babel。我不知道我做错了什么。

您可能想使用 coffeescript 中的粗箭头功能来绑定您的 "this":

@music.onended = =>
 @autoPlay()

如果你能post多了解一点上下文,那可能会有所帮助。