【问题标题】:Modal shows same video when open模态打开时显示相同的视频
【发布时间】:2020-04-07 04:18:53
【问题描述】:

我有以下代码:

<DOCTYPE html>
    <html>

    <head>
        <meta charset="utf-8">
        <title>JS Bin</title>
        <script src="http://code.jquery.com/jquery.min.js"></script>
        <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet"
            type="text/css" />
        <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
    </head>

    <body>
        <!-- Open a modal dialog button -->
        <div class="container" data-toggle="modal" data-target=".video-dialog">
            <div class="container1">
                <img class="1" src="1.PNG">
            </div>
            <div class="container2">
                <img class="img2" src="1.PNG">
                <img class="img3" src="1.PNG">
            </div>

        </div>
        </div>



        <!-- Video Player Dialog -->
        <div class="modal fade video-dialog" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel"
            aria-hidden="true">
            <div class="modal-dialog modal-lg">
                <div class="modal-content">
                    <div class="modal-body">
                        <div id="videoDialogPlayer" class="vidflex"></div>
                        <div id="videoDialogPlayer2" class="vidflex"></div>
                        <div id="videoDialogPlayer3" class="vidflex"></div>

                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                    </div>
                </div>
            </div>
        </div>

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

            (function () {
                var el = document.createElement('script');
                el.src = "//www.youtube.com/iframe_api";
                var s = document.getElementsByTagName('script')[0];
                s.parentNode.insertBefore(el, s);

                var videoDialogPlayer;
                var videoDialogPlayer2;
                var videoDialogPlayer3;

                window.onYouTubeIframeAPIReady = function () {
                    videoDialogPlayer = new YT.Player('videoDialogPlayer', {
                        height: '390',
                        width: '640',
                        videoId: 'mRBaAYdJuLY',
                    });

                }
                window.onYouTubeIframeAPIReady = function () {
                    videoDialogPlayer2 = new YT.Player('videoDialogPlayer2', {
                        height: '390',
                        width: '640',
                        videoId: 'UvRs60UV6YI',
                    });

                }
                window.onYouTubeIframeAPIReady = function () {
                    videoDialogPlayer3 = new YT.Player('videoDialogPlayer3', {
                        height: '390',
                        width: '640',
                        videoId: 'RXT_bj_zDAI',
                    });

                }
            }());
        </script>
        <style>
            .container {
                display: flex;
                justify-content: center;
            }

            .container1 {
                display: flex;
                margin-top: 20px;
                margin-right: 20px;
            }

            .img2 {
                width: 90%;
                padding-bottom: 20px;
                padding-top: 20px;
            }

            .img3 {
                width: 90%
            }

            .container2 {
                height: 550px;
                display: flex;
                flex-direction: column;
            }
        </style>
    </body>

    </html>

这会显示三张图片,当点击一个模态打开和一个 youtube 视频时,但模态上只显示相同的视频,我无法修复以显示不同的视频。顺便说一句,我正在使用 youtube API 来显示视频,所以我不知道如何仅使用 javascript 而不是像现在这样使用引导程序来做到这一点。

我把

 window.onYouTubeIframeAPIReady = function () {

全局,所以现在所有视频都会出现,但同时出现。我每次都需要展示不同的

【问题讨论】:

    标签: javascript jquery youtube-api


    【解决方案1】:

    欢迎来到 Stackoverflow。

    关于你的代码:每次调用

    window.onYouTubeIframeAPIReady = function () { ... }
    

    您将使用function () { ... } 定义的匿名函数分配给Windows 属性onYouTubeIframeAPIReady。该属性只能有一个值,因此每次分配匿名函数时都会覆盖前一个值。

    在您的网页成功加载后,存储在onYouTubeIframeAPIReady 属性中的函数将被执行,并用iframe 元素替换模态中给定videoDialogPlayer id 的div 元素。由于该属性仅记住您分配的最后一个匿名函数,因此您只能看到第三个视频。

    为简单起见,我建议您删除洞匿名函数部分,并将模态中的 div 元素替换为 iFrame,如下所示:

    <iframe id="player" type="text/html" width="640" height="390"
      src="http://www.youtube.com/embed/M7lc1UVf-VE?enablejsapi=1&origin=http://example.com"
      frameborder="0"></iframe>
    

    它是从YouTube documentation复制而来的,他们给出了以下通知:

    作为一项额外的安全措施,您还应该包括来源 URL 的参数,指定 URL 方案(http:// 或 https://) 和您的主机页面的完整域作为参数值。而原产地 是可选的,包括它可以防止恶意第三方 JavaScript 被注入你的页面并劫持你的控制权 YouTube 播放器。

    现在您的模态会同时显示所有三个视频。由于这不是您想要的,我们接下来会解决这个问题。 再次为简单起见,我建议将每个视频放在自己的模态中,并让每个图像成为模态切换。所以每张图片都会打开自己的模态。

    最后你的代码应该是这样的:

    <DOCTYPE html>
      <html>
    
      <head>
        <meta charset="utf-8">
        <title>JS Bin</title>
        <script src="http://code.jquery.com/jquery.min.js"></script>
        <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
        <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
      </head>
    
      <body>
        <!-- Open a modal dialog button -->
        <div class="container">
          <div class="container1">
            <img class="1" src="1.PNG" data-toggle="modal" data-target=".video-dialog">
          </div>
          <div class="container2">
            <img class="img2" src="1.PNG" data-toggle="modal" data-target=".video-dialog2">
            <img class="img3" src="1.PNG" data-toggle="modal" data-target=".video-dialog3">
          </div>
        </div>
    
    
    
        <!-- Video Player Dialog -->
        <div class="modal fade video-dialog" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
          <div class="modal-dialog modal-lg">
            <div class="modal-content">
              <div class="modal-body">
                <iframe id="player" type="text/html" width="640" height="390" src="http://www.youtube.com/embed/mRBaAYdJuLY?enablejsapi=1&origin=http://example.com" frameborder="0"></iframe>
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
              </div>
            </div>
          </div>
        </div>
        <!-- Video Player Dialog 2 -->
        <div class="modal fade video-dialog2" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
          <div class="modal-dialog modal-lg">
            <div class="modal-content">
              <div class="modal-body">
                <iframe id="player" type="text/html" width="640" height="390" src="http://www.youtube.com/embed/UvRs60UV6YI?enablejsapi=1&origin=http://example.com" frameborder="0"></iframe>
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
              </div>
            </div>
          </div>
        </div>
        <!-- Video Player Dialog 3 -->
        <div class="modal fade video-dialog3" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
          <div class="modal-dialog modal-lg">
            <div class="modal-content">
              <div class="modal-body">
                <iframe id="player" type="text/html" width="640" height="390" src="http://www.youtube.com/embed/RXT_bj_zDAI?enablejsapi=1&origin=http://example.com" frameborder="0"></iframe>
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
              </div>
            </div>
          </div>
        </div>
        <style>
          .container {
            display: flex;
            justify-content: center;
          }
          
          .container1 {
            display: flex;
            margin-top: 20px;
            margin-right: 20px;
          }
          
          .img2 {
            width: 90%;
            padding-bottom: 20px;
            padding-top: 20px;
          }
          
          .img3 {
            width: 90%
          }
          
          .container2 {
            height: 550px;
            display: flex;
            flex-direction: column;
          }
        </style>
      </body>
    
      </html>

    这是解决您的问题的最简单方法。从这里开始,你可以变得任意复杂。例如,您是否可以仅使用一种模式并根据用户点击的图像将其主体替换为正确的视频。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      相关资源
      最近更新 更多