YouTube API动态加载视频

时间:2012-12-16 18:35:30

标签: php javascript mysql youtube-api

- 我希望将很多视频加载到页面上,没有什么花哨的 - 视频ID存储在数据库中 - > $滑动[ '消息']
- 我可以让它只加载一个视频。其他人都是空白的 - 它在一个循环中,当种类== youtube时,它会尝试将视频放入。

if($slide['kind'] == 'youtube'){
?>
<li>
<div class="info<?php echo $count+1; ?>">
<h1><?php echo $slide['title']; ?></h1>
<div id="ytplayer<?php echo $count+1; ?>" class="youTube-viewer"></div>
<script>
var video = '<?php echo $slide['message']; ?>';
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player('ytplayer<?php echo $count+1; ?>', {
height: '365',
width: '648',
videoId: video,
playerVars: {
'rel': 0,
'enablejsapi': 1,
}
});
}
</script>
<h2><?php echo $slide['name']; ?></h2>  
</div>
</li>
<?php
}

2 个答案:

答案 0 :(得分:0)

如果整个代码块在一个循环中,那么它因为循环本身而失败。假设您有4个要插入的视频...因为您加载YT API javascript库的代码在循环内部,您最终将加载4次。并且因为你的回调函数在循环内部,你最终会定义它4次,每次都会覆盖先前的定义以及覆盖引用视频的对象。由于您的回调函数引用了视频,因此只有列表中的最后一个视频才会有一个持续存在的回调函数,因此我的猜测就是插入的视频。

tl; dr - 问题不在API中,而是在编程结构中。

也许你可以重新组织你的代码:

 // DON'T START YOUR LOOP YET
    <script>
    var tag = document.createElement('script');
    tag.src = "https://www.youtube.com/player_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
    function onYouTubePlayerAPIReady() {
    // START YOUR LOOP HERE
<?php
if($slide['kind'] == 'youtube'){
?>
        var player<?php echo $count+1 ?>;
    var video = '<?php echo $slide['message']; ?>';
    player<?php echo $count+1 ?> = new YT.Player('ytplayer<?php echo $count+1; ?>', {
    height: '365',
    width: '648',
    videoId: video,
    playerVars: {
    'rel': 0,
    'enablejsapi': 1,
    }
    }); // CODE CONTINUES ON FROM HERE, EVENTUALLY ENDING THE LOOP, PUTTING IN THE HTML

等。请注意,我发现我的代码无效;我只是指出你的循环应该在onYouTubePlayerAPIReady中,你需要为每个视频创建一个单独的播放器对象。 (好吧,你不需要......你可以采用一种不同的策略来利用API的其他方面......但鉴于你拥有的东西,这是最简单的。)作为上述评论者指出,如果你创建了一个jsfiddle与您的代码,人们可以更轻松地帮助您微调它以实现这种方法。

答案 1 :(得分:0)

使用jlmcdonald给我的一个提示,我让它工作,看到下面的小提琴的链接 http://jsfiddle.net/AaGvt/

<script>
var tag = document.createElement('script');
tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

var player;

function onYouTubeIframeAPIReady() {
  player = new YT.Player('player', {
    height: '250',
    width: '500',
    videoId: 'u1zgFlCw8Aw',
    events: {}
  });

  player = new YT.Player('player2', {
    height: '250',
    width: '500',
    videoId: 'u1zgFlCw8Aw',
    events: {}
  });

  player = new YT.Player('player3', {
    height: '250',
    width: '500',
    videoId: 'u1zgFlCw8Aw',
    events: {}
  });

}

</script>

<div id="player"></div>
<div id="player2"></div>
<div id="player3"></div>

通过SQL请求和循环,您可以构建div

<div id="player"></div>
etc...

并创建所需的javascript

  player = new YT.Player('player', {
    height: '250',
    width: '500',
    videoId: 'u1zgFlCw8Aw',
    events: {}
  });
etc...
相关问题