4

作業中のコンストラクター関数と一緒にyoutubeiframeapiを使用してyoutubeビデオを作成しようとしていますが、障害が発生しました。現在、Player関数でいくつかのデフォルトのプロパティを作成し、次にいくつかの新しいプロパティを新しいオブジェクトに渡して、デフォルトのプロパティと新しいプロパティを拡張してプレーヤーを作成しています。今の私の問題は、YouTubeビデオを実際にどのように初期化するのかわからないということです。どこに行けばいいのかわからないplayer = new YT.Player('player', {

これが作業中のJSimとjsFiddlehttp : //jsfiddle.net/kyllle/6zuh5/7/です。

function Player(options) {  
  var $player = $(options.id);

  var defaults = {
    height: '100',
    width: '200',
    videoId: 'u1zgFlCw8Aw',
    events: {
      'onReady': onPlayerReady

    },
    playerVars: {
      modestbranding: 0,
      controls: 0, //remove controls
      showinfo: 0,
      enablejsapi : 1,
      iv_load_policy: 3
    }
  };
     
  var combinedOptions = _.extend(defaults, options);
  console.log('Combined Options', combinedOptions);

  return {    
    pause: function () {      
      $player.pauseVideo();    
    },
        
    seek: function () {       
      //$player.seekTo();          
    },
        
    destroy: function () {      
      $player.destroy();    
    },
        
    changeVideo: function () {      
      $player.stopVideo();    
    }  
  }
};

function onPlayerReady() {
  console.log('player fired');
}

var myPlayer = new Player({  
    id: '#divId',
    autoPlay: true,
    videoId: 'asdadads'
});
4

3 に答える 3

4

init関数の後に呼び出される関数を追加しchangeVideoます。次に、Player をインスタンス化した後、その新しいインスタンスで init を呼び出します。( i.e. myPlayer.init())

ここに私が考えていることの例があります: 私はアンダースコアを省略し、代わりに jQuery の$.extend関数を使用しました。

<html>
<head>
    <title>Video Player</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script>
        function Player(options) {  

        var defaults = {
            height: '100',
            width: '200',
            videoId: 'u1zgFlCw8Aw',
            events: { 'onReady': null},
            playerVars: {
                  modestbranding: 0,
                  controls: 0, //remove controls
                  showinfo: 0,
                  enablejsapi : 1,
                  iv_load_policy: 3
             }
          };

          var combinedOptions = $.extend(defaults, options);
          console.log('Combined Options', combinedOptions);

          return {
            player: null,

            pause: function () {      
                this.player.pauseVideo();    
            },

            seek: function () {       
              //this.player.seekTo();          
            },

            destroy: function () {      
                this.player.destroy();    
            },

            changeVideo: function () {      
                this.player.stopVideo();    
            },

            onPlayerReady: function() {
                this.player.play();
            },

            init: function() {
                this.player = new YT.Player(combinedOptions.id, {
                height: combinedOptions.height,
                width: combinedOptions.width,
                videoId: combinedOptions.videoId,
                events: {
                    'onReady': this.onPlayerReady,
                    'onStateChange': null
                }
                });
            }
             }
        };


        var myPlayer;
        function onYouTubeIframeAPIReady() {
            myPlayer = new Player({  
                id: 'divId',
                autoPlay: true,
                videoId: 'NeGe7lVrXb0'
            });

            myPlayer.init();

        }

        $(document).ready(function() {
            var tag = document.createElement('script');
            tag.src = "https://www.youtube.com/iframe_api";
            var firstScriptTag = document.getElementsByTagName('script')[0];
            firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);    
        });


    </script>
</head>
<body>
    <div id="divId"></div>
</body>
</html>
于 2013-03-12T18:44:18.860 に答える
0

ビデオを配置したい場所に配置します。

<div width="200" height="100" onclick="loadVideo();"></div>

ページの最後に配置します。

<script>
function loadVideo() { // 2. This code loads the IFrame Player API code asynchronously.
 var tag = document.createElement('script');
 tag.src = "http://www.youtube.com/player_api";
 var firstScriptTag = document.getElementsByTagName('script')[0];
 firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); }
 // func loadVideo
 // 3. This function creates an <iframe> (and YouTube player)
 // after the API code downloads.
 var player;
 function onYouTubePlayerAPIReady() { player = new YT.Player('player', { height: '100', playerVars: { 'autoplay': 1, rel: 0 }, width: '200', videoId: 'mXtJ9BbeGB4', events: { 'onReady': onPlayerReady } }); }
 // 4. The API will call this function when the video player is ready.
 function onPlayerReady(event) { event.target.playVideo(); }
</script>
于 2013-01-16T09:37:30.583 に答える
0

個別のプレーヤーを作成および制御するために使用される Player クラスの実例。

JSFiddle の例

HTML:

<div id="divId1"></div>
<a href="#" id="play1">Play</a>

<a href="#" id="pause1">Pause</a>

<a href="#" id="stop1">Stop</a>
<br>
<div id="divId2"></div>
<a href="#" id="play2">Play</a>

<a href="#" id="pause2">Pause</a>

<a href="#" id="stop2">Stop</a>

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

Javascript

var Player = (function(){
  //private static
  var defaults = {
    height: '100',
    width: '200',
    videoId: 'u1zgFlCw8Aw',
    events: {},
    playerVars: {
      modestbranding: 0,
      controls: 0, //remove controls
      showinfo: 0,
      enablejsapi : 1,
      iv_load_policy: 3
    }
  };

    var constructor = function(options){
        this.options = _.extend(defaults, options);

        this.pause = function(event){
            event.target.pauseVideo()
        }

        if(this.options.autoPlay){
            this.options.events['onReady'] = function(event){
                event.target.playVideo()
            }
        }
        this.player = new YT.Player(this.options.id,this.options)
        //pause on click
        $(this.options.pauseID).bind('click',function(event){
            this.player.pauseVideo()
        }.bind(this))
        //play on click
        $(this.options.playID).bind('click',function(event){
            this.player.playVideo()
        }.bind(this))
        //stop on click
        $(this.options.stopID).bind('click',function(event){
            this.player.stopVideo()
        }.bind(this))
    }

    return constructor;
})() //function(){

$(document).ready(function(){
  var myPlayer = new Player({  
    id: 'divId1',
    pauseID:'#pause1',
    playID:'#play1',
    stopID:'#stop1',
    autoPlay: false,
    videoId: 'oe_mGl1f4xs'
  });

  var myPlayer2 = new Player({  
    id: 'divId2',
    pauseID:'#pause2',
    playID:'#play2',
    stopID:'#stop2',
    autoPlay: false,
    videoId: 'u1zgFlCw8Aw'
  });
})

Player クラスを作成するコードは、この質問に基づいています。

于 2013-03-17T20:46:32.913 に答える