Javascript Youtube-YT对象没有方法PauseVideo()
我已经将iFrame Youtube视频嵌入到我的页面中,我希望当用户单击“下一步”按钮以循环播放视频时,视频会暂停。在循环到下一个视频之前,我为活动视频创建了一个YT对象,并尝试运行Javascript Youtube-YT对象没有方法PauseVideo(),javascript,youtube-api,Javascript,Youtube Api,我已经将iFrame Youtube视频嵌入到我的页面中,我希望当用户单击“下一步”按钮以循环播放视频时,视频会暂停。在循环到下一个视频之前,我为活动视频创建了一个YT对象,并尝试运行pauseVideo()函数。控制台报告错误:uncaughttypeerror:Object#没有方法“pauseVideo” 令人费解的是,在调用pauseVideo()函数之前,我有console.log播放器,我确实看到了对象中可用的pauseVideo()方法。有人知道为什么我能够在YT对象中看到该方法,
pauseVideo()
函数。控制台报告错误:uncaughttypeerror:Object#没有方法“pauseVideo”
令人费解的是,在调用pauseVideo()
函数之前,我有console.log
播放器,我确实看到了对象中可用的pauseVideo()
方法。有人知道为什么我能够在YT对象中看到该方法,但控制台一直报告该方法不存在吗
JS小提琴:
//在DOM加载时异步加载IFrame播放器API代码
var tag=document.createElement('script');
tag.src=”https://www.youtube.com/player_api";
var firstScriptTag=document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(标记,firstScriptTag);
//当用户单击“下一张幻灯片”时触发
pauseActiveYoutubeVideos:function(){
var player=new YT.player($('#media.item.active iframe.ytplayer')[0]);
console.log(player);//pauseVideo()在此player对象中定义
player.pauseVideo();//控制台报告“未捕获类型错误:对象”没有方法“pauseVideo”
}
这里有很多小事情会增加你的问题。首先,必须将ID作为参数而不是jquery对象发送(如其中一条注释中所指出的)。更重要的是,YT iframe API在将iframe绑定到播放器对象然后将其删除时遇到问题。。。你不能再绑定到同一个iFrame。因此,需要替换嵌套循环。一种通常有效的策略是设置一个单独的跟踪对象,在开始时为每个视频创建一个YT.Player对象,然后只跟踪哪一个应该是活动的(以便知道暂停哪一个)。尝试类似的方法(它应该位于
标记中,而不是jQuery“ready”函数中,以避免iframeapi的异步加载出现问题):
创建播放器对象时,请确保在调用“pauseVideo”方法之前发生了“onReady”事件 例如,可以通过以下方式停止视频:
var player = new window.YT.Player(yourIframeElement, {
events: {
'onReady': function(event) {
event.target.pauseVideo();
}
}
});
注意:如果再次尝试使用相同的视频元素创建对象,“onReady”事件将不再发生。如果按如下方式强制创建对象,会发生什么:YT.Player(Player).pauseVideo()@这段视频仍然没有暂停。控制台报告了一个奇怪的错误:
uncaughttypeerror:无法调用未定义的方法“toLowerCase”
尝试仅将dom元素的ID发送到YT.Player构造函数:“media.item.active iframe.ytplayer”
,而不是jQuery对象。@RomainBraun我仍然得到与以前相同的错误,并且视频没有暂停:uncaughttypeerror:无法调用undefined的方法“toLowerCase”
。请删除我告诉您要做的第一件事
// Load the IFrame Player API code asynchronously on DOM load
var tag = document.createElement('script');
tag.src = "http://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// Sets up player tracker, and init the carousel
var players={}, activePlayerId;
function onYouTubeIframeAPIReady() {
$('iframe.ytplayer').each(function() {
players[$(this).attr('id')]=new YT.Player($(this).attr('id'));
});
activePlayerId=$('iframe.ytplayer').first().attr('id');
$("#"+activePlayerId).addClass('active');
// Click on carousel next button
$('#next').on('click', function() {
players[activePlayerId].pauseVideo();
$("#"+activePlayerId).removeClass('active');
if ($("#"+activePlayerId).next().is('iframe')) {
activePlayerId=$("#"+activePlayerId).next().attr('id');
}
else {
activePlayerId=$('iframe.ytplayer').first().attr('id');
}
$("#"+activePlayerId).addClass('active');
});
}
var player = new window.YT.Player(yourIframeElement, {
events: {
'onReady': function(event) {
event.target.pauseVideo();
}
}
});