【问题标题】:Stop YouTube video within iFrame on external Button click在外部按钮单击时停止 iFrame 中的 YouTube 视频
【发布时间】:2012-12-17 16:14:54
【问题描述】:

我知道有类似的问题,但我还没有完全能够让它工作。

此代码显示了一个 iframe 中的 YouTube 视频。单击按钮 (emsbinstartbutton) 时,视频将被隐藏并替换为占位符。如果此占位符 (threebytwo) 已关闭,则视频应再次显示。

目前这工作正常,只是当视频被隐藏时它会继续播放(您可以听到音频,当您返回时可以看到它仍在播放)。视频应在隐藏时停止。

 <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Widget.Master" Inherits="System.Web.Mvc.ViewPage<WidgetView>" %>

<%@ Import Namespace="WidgetData" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    <%= Html.WidgetTitle(Model) %>
</asp:Content>
<asp:Content ID="WidgetStyle" ContentPlaceHolderID="StyleContent" runat="server">
    <%= Html.WidgetStyle(Model) %>
    <%= Html.WidgetScripts(Model) %>
    <script type="text/javascript">

        // when they click on the buy now button we will hide the title and show the widget
        //detach work to stop vid but can t get it back.....
        $(document).ready(function () {
            $("#emsbinstartbutton").click(function () {
               $("#divbuyonlineVid").hide();
                $(".divbuyonlineVid").hide();
                $("#threebytwo").show();
            });
        });


        // when they click on the x the widget should be hidden and the video shows again
        $(document).ready(function () {
            $("#closebtn").click(function () {
                $("#divbuyonlineVid").show();
                $(".divbuyonlineVid").show();
                $("#threebytwo").hide();               
            });
        });

    </script>
    <!-- playing with additional CSS needed to get the page behaving the way I want Will move this into the widget style once proven -->
    <style type="text/css">
        #threebytwo
        {
            display: none;
        }
        #emsbin2startbutton
        {
            cursor: pointer;
        }
    </style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <div class="divbuyonlineVid">
        <!-- IMPORTANT the youtube video has to include &wmode=opaque at the end of the link so that the buynow button is above the video -->
        <img class="emsbinstarttext" id="emsbinstarttext" src="http://static.e-talemedia.net/content/images/DoveYoutubeMessage.png" />
        <img class="emsbinstartbutton" id="emsbinstartbutton" src="http://static.e-talemedia.net/content/images/DoveYoutubeBuyNowRed.png" />
        alt="" />
        <div class="divVidContainer">
            <iframe id="player" width="640" height="360" src="http://www.youtube.com/embed/AvywK19yVEk?feature=player_embedded&wmode=opaque&enablejsapi=1"
                frameborder="0" allowfullscreen></iframe>
        </div>
    </div>
    <div id="threebytwo" class="threebytwo">
        <img class="closebtn" id="closebtn" src="http://static.e-talemedia.net/content/images/DoveYoutubeExit.png" />
        <div class="threebytwomiddle">
            <ul>
                <% if (Model.ProductNotFound)
                   { %>
                <!-- List the retailers as we have none in stock -->
                <%= Html.WidgetProductNotFoundList(Model) %>
                <% }
                   else
                   { %>
                <%= Html.WidgetProductFoundList(Model) %>
                <% } %>
            </ul>
        </div>
    </div>
    <%= Html.WidgetImpressionCode2(Model) %>
    <%= Html.WidgetTrackingCode(Model) %>
</asp:Content>

我尝试了以下方法:

使用 .detach 和 append

  // when they click on the buy now button we will hide the title and show the widget
        //detach work to stop vid but can t get it back.....
        $(document).ready(function () {
            $("#emsbinstartbutton").click(function () {
                $holdera = $("#divbuyonlineVid").detach();
                $holderb = $(".divbuyonlineVid").detach();
                $("#threebytwo").show();
            });
        });


        // when they click on the x the widget should be hidden and the video shows again
        $(document).ready(function () {
            $("#closebtn").click(function () {    
                $("#threebytwo").hide();
                alert($holdera);
                $("#divbuyonlineVid").append($holdera);
                alert($holderb);
                $(".divbuyonlineVid").append($holderb);
            });
        });

即使视频在点击时停止,但当我尝试返回(附加)时,我会弹出一个对象错误。

停止和停止视频

所以在 iframe 中,添加&amp;enablejsapi=1:

 <iframe id="player" width="640" height="360" src="http://www.youtube.com/embed/AvywK19yVEk?feature=player_embedded&wmode=opaque&enablejsapi=1"
                frameborder="0" allowfullscreen></iframe>

在 jQuery 中:

 $(document).ready(function () {
            $("#emsbinstartbutton").click(function () {
                $holdera = $("#divbuyonlineVid").hide();
                $holderb = $(".divbuyonlineVid").hide();
                $("#player").stop();
                $("#threebytwo").show();
            });
        });

这不会改变任何事情。还有:

 $(document).ready(function () {
            $("#emsbinstartbutton").click(function () {
                $("#divbuyonlineVid").hide();
                $(".divbuyonlineVid").hide();
                $("#player").stopvideo();
                $("#threebytwo").show();
            });
        });

点击按钮时您仍然可以听到音频,但不会显示threebytwo。

我也加了这个&lt;script&gt;:

<script type="text/javascript" src="http://www.youtube.com/player_api" ></script>

谁能指出我正确的方向或看看我哪里出错了?

编辑:shabeer90 描述了如何停止让我上路的 youtube 视频,但如果您只是想暂停它并将其保留在后台,则以下代码可能有用:

jQuery:

 <script type="text/javascript">
        $(document).ready(function () {
            var obj = $('object')
     .wrap('<div id="test"></div>')
     .find('embed').attr('src', function (i, s) { return s + '&enablejsapi=1&version=3' }).end()
     .find('param[name=movie]').attr('value', function (i, v) { return v + '&enablejsapi=1&version=3' }).end()
     .detach()
     .appendTo($('#test'));

            $(document).ready(function () {
                $("#emsbinstartbutton").click(function () {
                    //Then assign the src to null, this then stops the video been playing
                    obj.find('embed')[0].pauseVideo();
                    $("body").append($("<div>").css({
                        position: "fixed"
        , width: "640px"
        , height: "425px"
        , "background-color": "#000"
        , opacity: 0.6
        , "z-index": 999
        , top: 0
        , left: 0
                    }).attr("id", "page-cover"));

                    $("#threebytwo").show();
                });
            });

            // when they click on the x the widget should be hidden and the video shows again
            $(document).ready(function () {
                $("#closebtn").click(function () {
                    //                     $("#divbuyonlineVid").show();
                    //                     $(".divbuyonlineVid").show();
                    $("#threebytwo").hide();
                    $("#page-cover").detach();
                });
            });

        });
    </script>

html:

<div class="divbuyonlineVid">
        <img class="emsbinstarttext" id="emsbinstarttext" src="http://static.e-talemedia.net/content/images/DoveYoutubeMessage.png" />
        <img class="emsbinstartbutton" id="emsbinstartbutton" src="http://static.e-talemedia.net/content/images/DoveYoutubeBuyNowRed.png"
            alt="" />
        <div class="divVidContainer">
            <object width="640" height="385">
                <%--IMPORTANT - the embed video format has to change so that it is exactly like below with the /v/ and &amp;hl=en_US&amp;fs=1  and  &wmode=opaque for the mask--%>
                <param name="movie" value="http://www.youtube.com/v/fBZTbCrM2eQ&amp;hl=en_US&amp;fs=1&wmode=opaque ">
                </param>
                <param name="allowFullScreen" value="true"></param>
                <param name="allowscriptaccess" value="always"></param>
                <embed src="http://www.youtube.com/v/fBZTbCrM2eQ&amp;hl=en_US&amp;fs=1&wmode=opaque"
                    type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true"
                    width="640" height="385" wmode="Opaque"></embed>
            </object>

        </div>
    </div>

非常感谢。

【问题讨论】:

  • 查看 youtube api 文档。试试 document.getElementById("yourPlayer").stopVideo() 方法

标签: jquery html iframe youtube


【解决方案1】:

你需要重置视频的链接,我遇到了类似的问题,我就是这样解决的,我在这个过程中使用了 jQuery。

//First get the  iframe URL
var url = $('#YourIFrameID').attr('src');

//Then assign the src to null, this then stops the video been playing
$('#YourIFrameID').attr('src', '');

// Finally you reasign the URL back to your iframe, so when you hide and load it again you still have the link
$('#YourIFrameID').attr('src', url);

查看answer

【讨论】:

  • 嗨 - 我做了以下事情: $(document).ready(function () { $("#emsbinstartbutton").click(function () { $("#divbuyonlineVid").hide( ); $(".divbuyonlineVid").hide(); //先获取iframe URL var url = $('#player').attr('src'); //然后把src赋值为null,this then停止播放视频 $('#player').attr('src', ''); $("#threebytwo").show(); }); });
  • // 当他们点击 x 时,小部件应该被隐藏并且视频再次显示 $(document).ready(function () { $("#closebtn").click(function () { $("#divbuyonlineVid").show(); $(".divbuyonlineVid").show(); $("#threebytwo").hide(); // 最后你将 URL 重新签名回你的 iframe,所以当你隐藏并再次加载它时,你仍然有链接 $('#player').attr('src', url); }); });
  • 这让播放器停止了,但是当我返回时视频没有显示
  • 你能把你的代码放在jsfiddle上,这样更容易诊断问题。只是没有asp代码的HTMl东西,我不是asp专家
  • 我没怎么用过 jsfiddel v 但你能看到吗? jsfiddle.net/afnguyen/mJnfC
【解决方案2】:

//在 HTML 中

<!--the button -->
<a class="button" data-open="videoModal" href="#">Example Video Modal</a>
<!--Modal Video -->
<div class="row" id="theVideo">
    <div id="videoModal" class="reveal" data-reveal data-close-on-click="true">
    <h2>This modal has video</h2>
        <div class="flex-video">
            <iframe id="youtubePlayer" width="854" height="480" src="https://www.youtube.com/embed/4z6aSO05YHg" frameborder="0" allowfullscreen allowscriptaccess="always"></iframe>
        </div>
        <button class="close-button" data-close aria-label="Close reveal" type="button" onClick="destroyVideo()">
        <span aria-hidden="true">&times;</span>
        </button>
    </div>
</div>

//在apps.js中

function destroyVideo(){
    var url = $('#youtubePlayer').attr('src');
    $('#youtubePlayer').attr('src', '');
    $('#youtubePlayer').attr('src', url);
}

//这项工作适用于 Foundation 6.2

【讨论】:

    【解决方案3】:

    嗯,你只需要更改iframe标签的source(src)属性值。就是这么简单! :)

    使用javascript,你可以这样做:

    var stopButton = document.getElementById('video-close-button-id');
    
    stopButton.onclick = function() {
      var myPlayer = document.getElementById("youtube-player-id"); 
      myPlayer.setAttribute("src", " ");
    }; 
    

    编码愉快。

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 1970-01-01
      • 2012-02-10
      • 2012-05-08
      • 1970-01-01
      • 2021-11-23
      • 2015-10-04
      • 2014-07-26
      • 2019-03-24
      相关资源
      最近更新 更多