gpt4 book ai didi

javascript - angular 2 使用具有组件本地成员的 'onended' 音频事件发射器

转载 作者:行者123 更新时间:2023-11-30 14:59:20 24 4
gpt4 key购买 nike

谁能帮我解决如何使用 audio.onended() 播放播放列表中的下一首歌曲的问题?
我可以将歌曲添加到播放列表,甚至可以通过传递 audioObject 使用上述方法播放歌曲。然而,当 audio.onended 触发时,它说 this.playlist.item is undefined

这和我认为的范围有关。
是否有另一种方法可以触发 ended() 并与此类的成员变量进行交互?

export class ..... {

playlist = {
item: []
};



playMedia(audioObject) {
this.nowPlayingChange.next(audioObject);
if (this.audio) {
this.audio.src = '';
this.audio.load();
}
this.audio = new Audio();
this.audio.src = audioObject.src;
this.audio.type = 'audio/mp3';
this.audio.load();
if (!this.audio.error) {
this.audio.play();
}
this.audio.onended = function() {
if (this.playlist.item.length > 1) {
for (let i = 0; i < this.playlist.item.length; i++) {
if (audioObject.title === this.playlist.item[i].title) {
if (i !== (this.playlist.item.length - 1))
this.playMedia(this.playlist[i + 1]);
} else {
this.audio.pause();
}
}
} else {
this.audio.pause();
}
};
}
}

最佳答案

使用箭头函数 => 而不是 function 来保留 this 关键字:

this.audio.onended = () => {         
if(this.playlist.item.length > 1) {
for (let i = 0; i < this.playlist.item.length; i++) {
if (audioObject.title === this.playlist.item[i].title) {
if(i !== (this.playlist.item.length - 1))
this.playMedia(this.playlist[i+1]);
} else
{
this.audio.pause();
}
}
} else {
this.audio.pause();
}
};

关于javascript - angular 2 使用具有组件本地成员的 'onended' 音频事件发射器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46773679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com