JQuery, исчезнуть в YouTube вставлять iframe - PullRequest
6 голосов
/ 23 октября 2011

Я пытаюсь добавить в YouTube вставку iframe, но она работает только в IE9, во всех других новейших браузерах (Safari, Opera, Chrome, Firefiox) - нет.Iframe показывается сразу же после установки непрозрачности на 0.

Я на Windows.

В чем я не прав?

ps: это хорошо работает с Vimeo YouTube вставлять iframe.

JsFiddle:

http://jsfiddle.net/jgtSS/26/

Ответы [ 2 ]

3 голосов
/ 23 октября 2011

По соображениям безопасности встроенный кадр становится полностью видимым, когда уровень альфа-канала (непрозрачность / фон) в iframe / ближайшем слое уменьшается.Таким образом, даже когда непрозрачность установлена ​​на 0.99999, отображается рамка.

Я создал решение для этой проблемы: создайте два слоя одинакового размера и добавьте их сразу после родительского элемента iFrame..

  1. Прикрепить фон к первому изображению, которое является предварительным просмотром видео
  2. Установить фон второго div для фона страницы, например white.

Затем оживите второй DIV, чтобы opacity 0 .Фон на первом изображении становится более заметным.В конце анимации скройте первый элемент div с помощью функции обратного вызова:

Чтобы позволить пользователю активировать видео во время анимации, привяжите обработчик события щелчка к DIV, который сразу скрывает слои, ивызовите метод playVideo встроенного видео.

Чтобы вызвать метод playVideo, вам нужна ссылка на встроенное видео.Поскольку вы не создали видео с помощью API видео YouTube, вы не можете использовать глобальную переменную для доступа к видео.Некоторое время назад я создал функцию для вызова методов во встроенном видео. Чтение: API iframe YouTube: как мне управлять плеером iframe, который уже находится в HTML?

Окончательный код

, который я создалживой пример на fiddle: http://jsfiddle.net/jgtSS/34/. Полный код также показан ниже.

<html><head>
<style>
#holder, #ID-of-first-div, #ID-of-second-div{
    position:absolute;
    width:320px;
    height:240px;
    top:0px;
    left:0px;
}
#ID-of-first-div, #ID-of-second-div {
    background: #FFF;
}
#btn1{
    position:absolute;
    background:#09C;
    width:40px;
    height:40px;
    top:250px;
    left:0px;

}
</style>
<script type="text/javascript">
$(window).load(function() {
    $('#btn1').click(function(){
        var vid_id = $('#player').get(0).src.match(/embed\/([^?]+)/)[1];
        var vid_bg = 'http://i2.ytimg.com/vi/'+vid_id+'/hqdefault.jpg';
        $('<img>').attr("src", vid_bg).css({width:'100%',height:'100%',border:'none'}).appendTo('#ID-of-first-div');
        $('#ID-of-second-div').animate({opacity: 0 }, 3000, function(){
            $('#ID-of-first-div').hide();
        });
        var both = $('#ID-of-first-div, #ID-of-second-div');
        both.click(function(){
            both.hide();
            callPlayer('player', 'playVideo');
        });
    });
});
/*
 * @author       Rob W (/5970906/api-iframe-youtube-kak-mne-upravlyat-pleerom-iframe-kotoryi-uzhe-nahoditsya-v-html#5970919)
 * @description  Executes function on a framed YouTube video (see previous link)
 *               For a full list of possible functions, see:
 *               http://code.google.com/apis/youtube/js_api_reference.html
 * @param String frame_id The id of the div containing the frame
 * @param String func     Desired function to call, eg. "playVideo"
 * @param Array  args     (optional) List of arguments to pass to function func*/
function callPlayer(frame_id, func, args){
    if(!document.getElementById(frame_id)) return;
    args = args || [];

    /*Searches the document for the IFRAME with id=frame_id*/
    var all_iframes = document.getElementsByTagName("iframe");
    for(var i=0, len=all_iframes.length; i<len; i++){
        if(all_iframes[i].id == frame_id || all_iframes[i].parentNode.id == frame_id){
           /*The index of the IFRAME element equals the index of the iframe in
             the frames object (<frame> . */
           window.frames[i].postMessage(JSON.stringify({
                "event": "command",
                "func": func,
                "args": args,
                "id": 1/*Can be omitted.*/
            }), "*");
        }
    }
}
</script>
</head><body>
<div id="holder">
   <iframe id="player" type="text/html" width="320" height="240"
  src="http://www.youtube.com/embed/u1zgFlCw8Aw?wmode=transparent?enablejsapi=1"
  frameborder="0"></iframe>
</div>
<div id="ID-of-first-div"></div>
<div id="ID-of-second-div"></div>

<div id="btn1"></div>
</body></html>
0 голосов
/ 15 июля 2014

Вы должны добавить wmode = opaque к URL-адресу YouTube. Чем оно будет плавно исчезать. Нравится htis

<iframe src="http://www.youtube.com/embed/a-TrP8Z3Cb8?wmode=opaque" ...

Благодаря Canolucas awnser найден здесь: https://stackoverflow.com/a/14426131/1303927

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...