【问题标题】:How make fancybox auto close when youtube video id done?youtube视频ID完成后如何让fancybox自动关闭?
【发布时间】:2011-11-24 09:47:27
【问题描述】:

当 youtube 视频结束时,我如何让 fancybox 自动关闭?

【问题讨论】:

    标签: youtube fancybox auto-close


    【解决方案1】:

    这并不像听起来那么简单:

    • 首先确定您要使用嵌入播放器还是 iframe 播放器。
    • 按照embed player APIiframe player API 示例初始化API。
    • 在弹出窗口打开后使用"onComplete" fancybox callback 函数设置播放器。
    • 在回调中,确保添加onStateChange 事件侦听器,以便确定视频何时结束(零值表示视频已结束)
    • 一旦发现视频已经结束,则使用$.fancybox.close方法关闭弹窗

    或者,您可以让用户关闭弹出窗口。

    【讨论】:

      【解决方案2】:

      这是带有 Fancybox-Youtube-Cookie-Autoclose-Autopopup 的完整脚本,只需下载 css 中所需的图像,将它们放在根目录的 /fancybox 文件夹中并替换为您的视频 ID。确实有效,经过全面测试...

      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
      <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.min.js"></script>
      <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/helpers/jquery.fancybox-media.js"></script>
      <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.min.css" media="screen" />
      <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
      <script src="http://www.youtube.com/player_api"></script>
       <script type="text/javascript"> 
      // detect mobile devices features
      var isTouchSupported = 'ontouchstart' in window,
          isTouchSupportedIE10 = navigator.userAgent.match(/Touch/i) != null;
      function onPlayerReady(event) {
          if (!(isTouchSupported || isTouchSupportedIE10)) {
              // this is NOT a mobile device so autoplay     
               event.target.playVideo();
          }
      }
      function onPlayerStateChange(event) {
          if (event.data === 0) {
              $.fancybox.close();
          }
      }
      function onYouTubePlayerAPIReady() {
      $(function() {
          if ($.cookie('welcome_video')) {
              // it hasn't been three days yet
          } else {
              // set cookie to expire in 3 days
              $.cookie('welcome_video', 'true', { expires: 3});
          $(document).ready(function () {
              $.fancybox.open({
      		href: "https://www.youtube.com/embed/qm1RjPM9E-g", /*YOUR VIDEO ID*/
                  helpers: {
                      media: {
                          youtube: {
                              params: {
                                  autoplay: 1,
                                  rel: 0,
                                  // controls: 0,
                                  showinfo: 0,
                                  autohide: 1,
                              }
                          }
                      },
                      buttons: {}
                  },
                  beforeShow: function () {
                      var id = $.fancybox.inner.find('iframe').attr('id');
                      var player = new YT.Player(id, {
                          events: {
                              onReady: onPlayerReady,
                              onStateChange: onPlayerStateChange
                          }
                      });
                  }
              }); // fancybox	
          }); // ready
         } // cookie else ready
      }); // function for cookie
      } // youtube API ready
      </script>

      【讨论】:

        【解决方案3】:

        在没有任何运气的情况下环顾四周后,我想出了一个解决方案

        看看我们做了什么,在这里观看视频

        <div style="display: none;">  
        <div id="player"></div>
        </div>  
        
            <script src="http://www.youtube.com/player_api"></script>
        
            <script>
        
                $(document).ready(function () {
                      $("a.video_button").fancybox({
                                'titlePosition'     : 'inside',
                                'transitionIn'      : 'none',
                                'transitionOut'     : 'none'
                            });
                });         
        
        
                // create youtube player
                var player;
                function onYouTubePlayerAPIReady() {
                    player = new YT.Player('player', {
                      height: '390',
                      width: '640',
                      videoId: 's19V_6Ay4No',
                      events: {
                        'onReady': onPlayerReady,
                        'onStateChange': onPlayerStateChange
                      }
                    });
                }
        
                // autoplay video
                function onPlayerReady(event) {
                }
        
        
                // when video ends
                function onPlayerStateChange(event) {        
                    if(event.data === 0) {          
                      $(document).ready(function () { parent.$.fancybox.close();});
                    }
                }
        
            </script>  
        

        【讨论】:

          【解决方案4】:

          是的,这是处理fancybox 或colorbox 的正确方法。 Youtube Video API 提供了不同的状态来处理这个问题,比如 unstarted=-1、ended=0、playing=1、paused=2、buffering=3、video cued=5

          在fancybox jquery 代码块中获取或捕获此状态可以轻松实现。也可以通过适当的演示访问这篇文章。Visit here

          【讨论】:

          • 您应该包含解决方案并引用您找到此信息的站点。此外,短代码在这里不是有效的方法,因为标记会处理它恕我直言。
          • 这是可以与fancybox代码一起使用的YouTube视频API链接-YouTube-API您可以在上面的API页面搜索函数-函数名-函数onYouTubePlayerReady(playerId)访问完整的代码块实现- INFOTOKRI
          猜你喜欢
          • 1970-01-01
          • 2014-05-27
          • 1970-01-01
          • 1970-01-01
          • 2014-01-18
          • 2013-08-13
          • 1970-01-01
          • 1970-01-01
          • 2012-03-20
          相关资源
          最近更新 更多