如何在 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多了解一点上下文,那可能会有所帮助。
我试图在音频以 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多了解一点上下文,那可能会有所帮助。