【问题标题】:youtube iframe api to show multiple videosyoutube iframe api显示多个视频
【发布时间】:2014-07-15 09:44:18
【问题描述】:

我有一个局部视图,剃须刀引擎看起来像这样

@model Tool.MVC.Areas.Widget.Models.VideoWidgetModel
@{
var baseUrl = ConfigurationManager.AppSettings["BaseUrl"];
var youTubeUrl=Model.ModalExitUrl;
var videoId="video_widget_"+Model.UniqueVideoId;
}
<div class="@videoId">
<div id="@videoId"></div>
<script type="text/javascript"src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.   
</script>
<script type="text/javascript" src="@baseUrl/Content/Scripts/jquery-ui.js"></script>
<script type="text/javascript">

 var youTubeUrlRegex = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/;
  var ytUrl = '@youTubeUrl';
 var ytUrlId = (ytUrl.match(youTubeUrlRegex)) ? RegExp.$1 : false;


//Load player api asynchronously.
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";

var firstScriptTag = document.getElementsByTagName('script')[0];

firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
console.log(tag);

var player;
function onYouTubeIframeAPIReady() {

    player = new YT.Player('@videoId', {
      height: '290',
      width: '220',
      videoId: ytUrlId,
      events: {

      }
    });
}
</script>
</div>

VideoId 正在生成一个 Guid,以便每次我在我的页面上有一个部分时都有一个 div 的不同 id。 但是当我渲染页面时,在我的页面中我有两个部分,每个部分都有一个视频,所以两次会加载这个页面,但只有最后一个是在 Youtube 播放器中显示视频,另一个只是说 YT.player 未定义,所以我认为没有加载 IframeApi。 我怎样才能多次加载这个 Youtube 播放器及其 Api 以显示尽可能多的视频。

非常感谢您的回答, 谢谢

【问题讨论】:

    标签: youtube-api


    【解决方案1】:

    api 脚本只需要加载一次。但是每个玩家都需要一个独特的参考。 这是一个工作示例的代码链接: Setting video start time with the YouTube API - "start" playerVars option used to work, but now does not? 但是示例代码不是基于模型的。

    可能是这样的:

        var players = Array(); // Should be a global var for reference to all the players
    
        function onYouTubeIframeAPIReady() {
            var player; // not usable for reference
            player = new YT.Player('@videoId', {
                         height: '290',
                         width: '220',
                         videoId: ytUrlId,
                         events: {
    
                                 }
                      });
            players.push(player); // Saving player reference in a global var
        }
    

    【讨论】:

    • 是的,但在这种情况下,我一开始不知道我会使用多少玩家,所以它是动态的
    • @kingjulian 您可以在 onYouTubeIframeAPIReady() 中创建第一个播放器。然后仅在创建第一个时才允许创建其他人。问题是,在创建播放器之前,您必须等待 onYouTubeIframeAPIReady() 的调用。
    • @kingjulian 您是否检查了我的答案底部提到的链接?该示例从创建 5 个玩家开始,但您可以将其更改为任何其他值,例如 1。它还显示了一个“添加一个 Flocka”按钮来创建后续玩家。
    • 是的,但你知道你想要 5 次,使用 for 循环,在我的情况下,我每次都使用模型中的 videoId 得到这个部分,就是这样。不知何故,我必须创建一个基于动态数组在这个 id 上。这就是为什么你在这个例子中的想法会有所帮助。
    • @kingjulian 问题是我不知道您使用的“带有剃刀引擎的局部视图”。您想要多个播放器,但您将所有播放器分配给同一个 var: player。每次都不应该是相同的单个 var。数组元素或不同的 var 名称。
    猜你喜欢
    • 2015-06-24
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 2016-05-22
    • 1970-01-01
    • 2020-06-10
    • 2015-11-03
    相关资源
    最近更新 更多