我在页面上有一堆旋转木马,每个都有视频和图像的混合.当用户通过单击其中一个轮播控件(左侧或右侧)退出视频时,我想停止播放Youtube视频.
我希望能够检测用户何时点击控件,根据正在播放的当前视频创建播放器,并关闭该视频.在我看过的其他例子中,玩家是在onYoutubeIframeAPIReady函数中声明的,但我认为最好不要为页面上的每个视频动态创建玩家.现在,我收到了错误
Uncaught TypeError: Object #<T> has no method 'stopVideo'
当我点击旋转木马控件时.但是,如果我输入
player.stopVideo();
在Chrome javascript控制台中,它运行正常.我究竟做错了什么?
<script> var youtubeReady = false; function onYouTubeIframeAPIReady(){ youtubeReady = true; } $('.carousel').on('slide',function(){ if(youtubeReady){ console.log("setting player"); var iframeID = $(this).find('.active').find('iframe').attr("id"); player = new YT.Player(iframeID); player.stopVideo(); } }); </script>
示例轮播:
<div class="mainPhoto carousel slide 523" id="carousel-523"> <div class="carousel-inner 523"> <div class="item active"> <div class="flex-video"> <a class="fancybox" href="http://www.youtube.com/embed/4pEqbs0ISaw?version=3&enablejsapi=1" rel="gallery 523" data-fancybox-type="iframe"> <iframe src="http://www.youtube.com/embed/4pEqbs0ISaw?version=3&enablejsapi=1" id="1188"> </iframe> </a> </div> </div> <div class="item"> <a class="fancybox" href="https://buildinprogress.s3.amazonaws.com/image/image_path/1189/2013-07-05_19.47.55.jpg" rel="gallery 523" data-fancybox-type="image"> <img alt="Preview_2013-07-05_19.47.55" id="1189" src="https://buildinprogress.s3.amazonaws.com/image/image_path/1189/preview_2013-07-05_19.47.55.jpg" width="100%"> </a> </div> </div> <a class="carousel-control left" href="#carousel-523" data-slide="prev" style="display: none;">‹</a> <a class="carousel-control right" href="#carousel-523" data-slide="next" style="display: none;">›</a> </div>
解决方法
我最终在这里使用了callPlayer函数(根本不需要使用youtube API):
YouTube iframe API: how do I control a iframe player that’s already in the HTML?