Как сделать автоматическое закрытие fancybox, когда идентификатор видео на YouTube готов? - PullRequest
4 голосов
/ 25 сентября 2011

Как сделать автоматическое закрытие fancybox, когда видео на YouTube закончилось?

Ответы [ 4 ]

2 голосов
/ 05 ноября 2015

это полный скрипт с Fancybox-Youtube-Cookie-Autoclose-Autopopup, просто скачайте изображения, которые требуются в css, поместите их в папку / fancybox в вашем корне и замените на ваш идентификатор видео. Действительно работает полностью проверено ...

<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>
2 голосов
/ 25 сентября 2011

Это не так просто, как кажется:

  • Сначала определите, собираетесь ли вы использовать проигрыватель embed или iframe.
  • Следуйте API-интерфейсу для встраивания или iframe player API примеры для инициализации API.
  • Используйте функцию "onComplete" fancybox callback для настройки проигрывателя после открытия всплывающего окна.
  • В обратном вызове убедитесь, что вы добавили onStateChange прослушиватель событий, чтобы вы могли определить, когда видео завершилось (нулевое значение означает, что видео закончилось)
  • Как только вы обнаружите, чтовидео закончилось, затем используйте метод $.fancybox.close, чтобы закрыть всплывающее окно

, или вы можете просто позволить пользователю закрыть всплывающее окно.

0 голосов
/ 22 марта 2015

Да, это правильный способ обработки fancybox или colorbox.YouTube Video API предоставляет различные состояния для обработки этого, например: unstarted = -1, окончено = 0, воспроизведение = 1, приостановка = 2, буферизация = 3, просмотр видео = 5

Получение или отслеживание этого состояния в коде jancyeryБлок один может достичь этого легко.Просто зайдите в эту статью с соответствующей демонстрацией. Посетите здесь

0 голосов
/ 21 февраля 2013

Посмотрев без удачи, вот решение, которое я придумала

Посмотрите, что мы делаем, посмотрите видео здесь

<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>  
...