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

时间:2017-04-10 17:06:56

标签: javascript coffeescript babeljs atom-editor babel

我试图在音频以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------//

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

更具体一点。我看到一个使用原子上的onended事件的包,这里是代码。

  

代码状元

'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。我不知道自己做错了什么。

1 个答案:

答案 0 :(得分:1)

您可能希望使用coffeescript中的胖箭头功能绑定您的"这个":

@music.onended = =>
 @autoPlay()

如果你可以发布一点上下文,那可能会有所帮助。