使用JQuery制作YouTube的简单播放按钮

3
我希望有2个简单的按钮播放和停止YouTube视频。我尝试了使用jQuery实现,但并没有成功。
以下是需要翻译的内容:
1. 有没有人能够帮我提供一个简洁明了的解决方案来制作一个YouTube视频的播放按钮?
2. 我能否隐藏视频以便只听到声音?
链接: http://codepen.io/anon/pen/Carwu http://jsfiddle.net/8kN6Z/34/
$(function(){

  $("#video").hide();          
  $("#escolta").click(function() {
    video.playVideo();
    //$("#video").playVideo();
    //$("#video").trigger('play');
    //$(".player").playVideo()

    });

  $("#pausa").click(function() {
    video.stopVideo();
    //$("#video").trigger('pause');
  });

});

CSS:

#escolta,#pausa{ font-family: Tahoma;letter-spacing:1px;font-size:11px;color: #666;width: 80px;text-align: center;height: 20px;line-height: 20px;background-color: #ccc;cursor: pointer;}
#escolta {position:absolute;top: 20px;left:20px;}
#pausa{position: absolute;top:20px;left: 150px;}​
#pausa{position: absolute;top:20px;left: 150px;}
#video{position:absolute;top:100px;left:20px;}

HTML:

<div id="escolta">escolta</div>
<div id="pausa">pausa</div>

<iframe id="video" width="640" height="360" src="http://www.youtube.com/embed/4G1mundpq-Q?rel=0" frameborder="0" allowfullscreen></iframe>

你还能想象有比点击视频更简单的操作吗? - Blazemonger
1
@Blazemonger 但这不符合问题所要求的使用API的方式 :) - JustAnotherDeveloper
1-我想隐藏视频,仅听声音。 2-我想自定义按钮以适应页面设计。这里显示的只是一个简化的示例,以帮助解释问题。 - Nrc
4个回答

5

我重新检查了这个问题,并找出了一些你遇到的问题。

可以在JSFiddle上查看它的工作情况 http://jsfiddle.net/8kN6Z/33/

以下是你做错的事情:

您没有加载Youtube播放器API。即使您使用iframe,也必须手动执行此操作。

您没有创建名为onYouTubePlayerAPIReady的函数。

您没有为框架创建YT.Player对象,并将onReady事件处理程序设置为该YT.Player对象的onPlayerReady函数。

您没有等待在onPlayerReady回调函数内部将单击事件处理程序设置为已准备就绪的YT.Player对象。

您将JSFiddle上的Javascript API设置为Mootools,然后使用CSS选择器语法与$('#id')一起使用。$ $('#id')与mootools一起使用,但$('id')是正确的Mootools语法。 $('#id')是jQuery。

您将javascript包装在onLoad方法中。这不起作用。

YouTube Player API设置和函数定义需要在顶层定义。

最大的问题是iframe标记中缺少type =“text / html”和src脚本参数&enablejsapi = 1属性。如果没有这些,所有脚本都不起作用。

在Codepen上,您正在使用jQuery,因此必须转换为该解决方案。

我遇到的问题是Mootools:

$('video').hide()不起作用。创建一个.hideme类,其中包含display:none,并在onPlayerReady回调函数的末尾调用$('video').addClass('hideme')即可正常工作。

JS Fiddle工作示例

HTML:

<body>
    <div id="escolta">escolta</div>
    <div id="pausa">pausa</div>
    <iframe id="video" type="text/html" width="640" height="360" src="http://www.youtube.com/embed/4G1mundpq-Q?rel=0&enablejsapi=1" frameborder="0" allowfullscreen></iframe>
</body>

CSS(层叠样式表):
#escolta, #pausa {
    font-family: Tahoma;
    letter-spacing:1px;
    font-size:11px;
    color: #666;
    width: 80px;
    text-align: center;
    height: 20px;
    line-height: 20px;
    background-color: #ccc;
    cursor: pointer;
}
#escolta {
    position:absolute;
    top: 20px;
    left:20px;
}
#pausa {
    position: absolute;
    top:20px;
    left: 150px;
}
#pausa {
    position: absolute;
    top:20px;
    left: 150px;
}
#video {
    position:absolute;
    top:100px;
    left:20px;
}
.hideme {
    display:none;
}

JS:

var tag = document.createElement('script');
tag.src = "//www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
function onYouTubePlayerAPIReady() {
    new YT.Player('video', {
        events: {
            'onReady': onPlayerReady
        }
    });
}
function onPlayerReady(event) {
    $("escolta").addEvent('click', function () {
        event.target.playVideo();
    });
    $("pausa").addEvent('click', function () {
        event.target.stopVideo();
    });
    $('video').addClass('hideme');
}

以下是jQuery的更新信息:

我保存了一个新的已测试可行的jQuery jsfiddle http://jsfiddle.net/8kN6Z/47/

唯一的更改是JavaScript部分中通过id选择按钮的两行代码。其余的JavaScript使用了内置的DOM方法。

JQuery JS:

var player;
function onYouTubePlayerAPIReady() {
    player = new YT.Player('video', {
      events: {
        'onReady': onPlayerReady
      }
    });
}
function onPlayerReady(event){
  event.target.playVideo();
    $("#escolta").on('click', function() {
      player.playVideo();
    });
    $("#pausa").on('click', function() {
      player.stopVideo();
    });
  }
var tag = document.createElement('script');
tag.src = "//www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

1
谢谢您的回答,但是我的jsfiddle不小心使用了Mootools库(似乎这是jsfiddle的默认设置)。正如我在标题中所说,我需要jQuery。我对Mootools一无所知,也不知道如何将您的代码适应于jQuery。您能否用jQuery来实现它呢?那就太好了! - Nrc
我更新了答案,加入了jQuery代码和链接到已测试工作的jQuery jsFiddle。 - freegnu
你的示例(fiddle)在Mac OS X上无法工作。无论是在Chrome还是Firefox中都不行。但在Windows上没问题。 - artnikpro
@freegnu,您的Fiddle(http://jsfiddle.net/8kN6Z/47/)在IOS(iphone,ipad)上无法工作,并显示以下错误:“如果播放不会很快开始,请尝试重新启动您的设备”。您有什么建议可以修复这个问题并在IOS上自动播放? - aiddev

1
我创建了一个简单的函数,它可以100%正常工作。简单又快速 :)
以下是代码:
<div class="col-xs-12 vdoframe"><img src="images/vdoimg.jpg" style="cursor:pointer" id="videoimg" />
<iframe width="100%" height="100%" src="http://www.youtube.com/embed/9-F7fkAz5G0?rel=0&enablejsapi=0" frameborder="0" allowfullscreen="" id="video"></iframe>
</div>


<script type="text/javascript">
            $(document).ready(function(){

                $('#videoimg').on('click', function(){

                    $(this).css({
                        'z-index':'1'
                    });

                    $('#video').css('z-index', '2');
                    $("#video")[0].src += "&autoplay=1";
        ev.preventDefault();

                })

})


    </script>

1
把这个放在 HTML 部分。对于格式问题我很抱歉,我很赶。
<body>
<div id="escolta">escolta</div>
<div id="pausa">pausa</div>
<div id="player"></div>
<script>
  // 2. This code loads the IFrame Player API code asynchronously.
  var tag = document.createElement('script');
  tag.src = "//www.youtube.com/player_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 onYouTubePlayerAPIReady() {
    player = new YT.Player('player', {
      height: '360',
      width: '640',
      videoId: '4G1mundpq-Q',
      events: {
        'onReady': onPlayerReady,
        'onStateChange': onPlayerStateChange
      }
    });
  }
  // 4. The API will call this function when the video player is ready.
  function onPlayerReady(event) {
    //event.target.playVideo();
    $("#escolta").click(function() {
        player.playVideo();
    });
    $("#pausa").click(function() {
        player.stopVideo();
    });
  }
  // 5. The API calls this function when the player's state changes.
  //    The function indicates that when playing a video (state=1),
  //    the player should play for six seconds and then stop.
  var done = false;
  function onPlayerStateChange(event) {
    //if (event.data == YT.PlayerState.PLAYING && !done) {
      //setTimeout(stopVideo, 6000);
      //done = true;
    //}
  }
  function stopVideo() {
    player.stopVideo();
  }
</script>
</body>

请在fiddle或codepen中尝试一下。我觉得它不起作用?http://codepen.io/anon/pen/Carwu http://jsfiddle.net/8kN6Z/ - Nrc

1

您不需要使用jQuery选择器来获取播放器,您应该为播放器指定一个ID,例如“'player'”。从这一点出发,您可以简单地执行player.playVideo();

https://developers.google.com/youtube/iframe_api_reference

编辑: 如果要隐藏播放器,您可以使用$("#player").hide();,因为它会隐藏iFrame :)


我认为它不起作用,或者有些地方我没有理解。你能在这里展示一下吗?http://jsfiddle.net/8kN6Z/5/ - Nrc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接