【问题标题】:Youtube API and javascript questionsYoutube API 和 javascript 问题
【发布时间】:2011-04-20 15:04:15
【问题描述】:

我知道这一定是完全的贫民窟,但我正试图弄清楚如何获取我的 youtube 链接的提要,以一种有点时尚的方式显示在我的主页上。我厌倦了不得不在 youtube 上发布一些东西,然后在我的网站上创建一个基本上是 youtube 帖子复制的帖子。也许已经有一些东西内置了这个功能,但到目前为止我还没有看到它。到目前为止,我有几个关于我要完成的工作的问题:

  1. 如何更新我的代码,以便我可以在必须引用变量名的 youTubeMe 对象中使用“this”。我很确定我明白为什么我现在无法使用它,但我不知道如何解决?

  2. 其次,google api 对我来说似乎有点奇怪。我对使用 iFrame 并不太感兴趣,为了得到 VideoId 而我必须做的拆分操作是不正确的。

  3. 我们将不胜感激任何建议。我将发布代码,但您也可以找到一个工作示例here

HTML:

<div id="pager">
</div>
<div id="player">
</div>
<script type="text/javascript">
    var tag = document.createElement('script');
    tag.src = "http://www.youtube.com/player_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    function onYouTubePlayerAPIReady() {
        youTubeMe.init();
    }

</script>

JAVASCRIPT:

var youTubeMe = {
    pageSize: 10,
    player: null,
    startIndex: 1,
    username: 'google',

    init: function() {
        $.getJSON('http://gdata.youtube.com/feeds/users/' + this.username + '/uploads?alt=json&start-index=' + this.startIndex + '&max-results=' + youTubeMe.pageSize, youTubeMe.createYouTubePlayers);
    },

    createYouTubePlayers: function(data) {
        $('#player').empty();
        $('#pager').empty();
        if (data.feed.entry.length < youTubeMe.pageSize) {
            youTubeMe.createPreviousButton();
        } else {
            if (youTubeMe.startIndex !== 1) {
                youTubeMe.createPreviousButton();
            }
            youTubeMe.createNextButton();
        }

        for (var i = 0; i < data.feed.entry.length; i++) {
            player = new YT.Player('player', {
                height: '195',
                width: '320',
                videoId: data.feed.entry[i].id.$t.split('/')[5]
            });
        }
    },

    createNextButton: function() {
        $('<a id=\"next\" href=\"#\">next</a>').appendTo('#pager');
        $('#next').click(function(e) {
            e.preventDefault();
            youTubeMe.startIndex += youTubeMe.pageSize;
            youTubeMe.init();
        });
    },

    createPreviousButton: function() {
        $('<a id=\"prev\" href=\"#\">prev</a>').appendTo('#pager');

        $('#prev').click(function(e) {
            e.preventDefault();
            youTubeMe.startIndex -= youTubeMe.pageSize;
            youTubeMe.init();
        });
    }

};

CSS:

iframe { margin: 20px; }
#pager { background-color: #666; line-height: 3em; text-align: center; }
#pager a { color: #fff; font-size: 1.8em; margin: 0 15px; }

【问题讨论】:

    标签: javascript jquery youtube youtube-api


    【解决方案1】:

    您应该采用的方法是创建一个闭包并将所有内容都包含在其中。你可以这样做:

    //a closure function that calls itself (function(){ //with var it would be private and not accesable like this: //youTubeMe.pageSize var pageSize = 10; //declare a global reference to the youTubeMe object var youTubeMe = window.youTubeMe = function(){ }; //with youTubeMe.* it is accessable from anywhere in your page //you can either //declare a public variable like this youTubeMe.player = "youtube player"; //or a public method like this youTubeMe.foo = function(){ //this "this" here is your youTubeMe object console.log(this); bar(); }; //like the private variable at the top, this function is private //and can only be called from inside the youTubeMe object function bar(){ //this "this" here is the window console.log(this); } })(); console.log(youTubeMe.player); //out puts youtube_player youTubeMe.foo(); //outputs the youTubeMe object youTubeMe.bar() //throws an undefined error

    至于 youtube api;我一直觉得它真的很好。我从来没有使用过 iframe embed,只是因为“iframe embed”对我来说听起来不合适。如果您使用youtube api,您有两个选择:Embedded playerchromeless player。看看嵌入式播放器,因为除非你想为你的播放器构建一个自定义皮肤,否则它就是要走的路。当您使用 api 时,创建播放列表变得很容易,因为您让 javascript 完成所有播放和播放列表的工作。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 2016-02-27
      • 2016-11-09
      • 2011-03-31
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多