通过动态创建的播放列表中添加事件处理循环(YouTube的API)(Adding event han

2019-10-19 14:17发布

尝试与收听历史一起实现播放列表功能。 的播放列表视频的缩略图动态拖/下降/用户进入一个div来分类的。 每点击缩略图时,视频被加载到播放器和视频添加到历史( subHist.click()

由于影片是动态创建的,我无法创建事件监听器移动到开头的下一个视频,并有后来添加。 但问题是我有一个创建事件侦听器函数内的收听历史记录功能,因此事件监听器被调用增加次数,因为我们通过播放列表,这意味着点击一次当视频出现在播放列表中多次。

这可能使一些代码更有意义:

$('#Playlist').on('click', '.playlistYT', function(){
    $('#subHistory').click();
    videoID = $(this).attr("src").slice(27,38);
    $('#infoID').val(videoID);
    player.loadVideoById(videoID ); 
    var nextVideo = $(this).parent().next().find('.playlistYT');
    player.addEventListener('onStateChange', function stopCycle(event) {
    if (event.data == YT.PlayerState.ENDED) {
    $(nextVideo).click();
  }
});      
});

这些图像类的.playlistYT一旦被丢弃(即任何视频都将被丢弃在此之前类不存在),和$('#subHistory').click()它增加了视频聆听历史。

如果我移动var nextVideo的范围内addEventListener ,那么它不承认它(不能使用$(this) ,因为它似乎重新定义的事件处理程序中的事件)。 移动$('#subHistory').click()stopCycle功能似乎没有什么区别。

花了过去几天里有。一,.off玩耍的,.live,似乎无法破解它。 removeEventListener似乎没有任何区别,无论是。 我想加入一个隐藏的视频,播放列表但随后变得确保视频不会出现在用户的聆听记录/播放列表的问题。

Answer 1:

onStateChange传递给事件侦听事件具有“数据”对象,但它也有“目标”对象,表示引发该事件的玩家。 因此,例如,您可以定义处理onStateChange当你初始化的iFrame API,并侦听器函数中,你可以使用类似的功能:

event.target.getVideoData().video_id

要查找引发事件的播放视频的ID。 根据您的示例代码,它看起来像知道视频ID可以帮你写正确的jQuery选择寻找到DOM中的视频是什么,然后从那里导航到下一个。 因此,你的事件监听器将只定义一次,但它能够处理应用的播放列表的动态特性。



文章来源: Adding event handler to loop through dynamically created playlist (YouTube API)