【问题标题】:Show a custom picture before a youtube video starts在 youtube 视频开始之前显示自定义图片
【发布时间】:2012-10-22 03:24:48
【问题描述】:

我正在尝试在“播放器”div 中显示图像,然后在访问者单击按钮后,将其替换为视频(将 div 替换为 iFrame)。这是我的代码:

<!DOCTYPE html> 
<head>
<style type="text/css">
html {
text-align: center;
}

#player {
display: inline-block;
width: 640px;
height: 360px;
background: url(http://placehold.it/640x360) no-repeat;
}
</style>
</head>
<html>
  <body>
    <!-- 1. The <iframe> (and video player) will replace this <div> tag. -->
    <div id="player"></div>
    <p><button onclick="playMe()">Play</button></p>

    <script>
    function playMe() {
      // 2. This code loads the IFrame Player API code asynchronously.
      var tag = document.createElement('script');
      tag.src = "https://www.youtube.com/iframe_api";
      var firstScriptTag = document.getElementsByTagName('script')[0];
      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

      // 3. This function creates an <iframe> (and YouTube player)
      //    after the API code downloads.
      var player;
      function onYouTubeIframeAPIReady() {
        player = new YT.Player('player', {
          height: '360',
          width: '640',
          videoId: 'JW5meKfy3fY',
          playerVars: { 'autoplay': 0, 'controls': 0, 'rel': 0, 'showinfo': 0 },
          events: {
            'onReady': onPlayerReady
          }
        });
      }

      // 4. The API will call this function when the video player is ready.
      function onPlayerReady(event) {
        event.target.playVideo();
      }

    }

    </script>
  </body>
</html>

但它不起作用。

当“playMe”功能被删除时它可以工作,但我需要在点击按钮/div/链接后开始播放视频。我尝试将图片和视频放在单独的divs 中,图片在视频顶部,然后单击隐藏顶部 div 并开始播放视频,但这也不起作用。

【问题讨论】:

    标签: javascript html youtube-api youtube-javascript-api


    【解决方案1】:

    这是一个变量范围问题。

    YouTubeIframeAPIReady 函数需要是一个全局变量 - 就像播放器变量一样。

    我相信这个示例应该作为您想要的基础(如果您在 api 下载之前单击按钮,则会出现竞争条件,但完整的实现可能是特定于应用程序的,所以我将把它留给读者)

        <!DOCTYPE html> 
    <head>
    <style type="text/css">
    html {
    text-align: center;
    }
    
    #player {
    display: inline-block;
    width: 640px;
    height: 360px;
    background: url(http://placehold.it/640x360) no-repeat;
    }
    </style>
    </head>
    <html>
      <body>
        <!-- 1. The <iframe> (and video player) will replace this <div> tag. -->
        <div id="player"></div>
        <p><button onclick="playMe()">Play</button></p>
    
        <script>
        // 2. This code loads the IFrame Player API code asynchronously.
        var tag = document.createElement('script');
        tag.src = "https://www.youtube.com/iframe_api";
        var firstScriptTag = document.getElementsByTagName('script')[0];
        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
    
        // 3. called after the API code downloads.
        var player;
        function onYouTubeIframeAPIReady() {
            // don't need anything here
        }
    
        // 4. The API will call this function when the video player is ready.
        function onPlayerReady(event) {
            event.target.playVideo();
        }
    
        function playMe() {
            if (window.YT) {
                player = new YT.Player('player', {
                            height: '360',
                            width: '640',
                            videoId: 'JW5meKfy3fY',
                            playerVars: { 'autoplay': 0, 'controls': 0, 'rel': 0, 'showinfo': 0 },
                            events: {
                                'onReady': onPlayerReady
                            }
                        });
            }
        }
        </script>
      </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-25
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多