2012-07-18 87 views
3

我想要2个简单的按钮来播放和停止YouTube视频。我尝试了这样的jQuery,并不起作用。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> 
+0

你如何简单得多可以获得比点击视频? – Blazemonger 2012-07-18 13:29:55

+1

@Blazemonger但这不会使用API​​作为问题:) – JustAnotherDeveloper 2012-07-18 13:31:42

+0

1-我想隐藏视频,只听到声音。 2 - 我想自定义按钮以适合页面的设计。我在这里展示的只是简化以帮助解释这个问题 – Nrc 2012-07-18 13:32:46

回答

5

我再谈这个。想通了一些您遇到的问题。

看看它的jsfiddle http://jsfiddle.net/8kN6Z/33/

在这里工作是你做了什么错:

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

你没有创建一个名为onYouTubePlayerAPIReady功能。

你没有为您创造一个框架对象YT.Player和该YT.Player对象onReady事件处理程序设置为您onPlayerReady功能。

你没等到onPlayerReady回调函数来设置点击事件处理程序的准备YT.Player对象内。

你的jsfiddle设置的JavaScript API来Mootools的,然后使用CSS选择器语法用$( '#ID')。 $$('#id')与mootools一起使用,但$('id')是正确的Mootools语法。 $('#id')是jQuery。

你包裹在onload方法的JavaScript。哪个不行。

YouTube播放器API设置和功能定义,需要在顶层进行定义。

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

在Codepen你正在使用jQuery因此该方案将不得不进行音译。

问题我用MooTools的遭遇: $( '视频')隐藏()不工作。使用display:none创建一个.hideme类,并在onPlayerReady回调函数结束时调用$('video')。addClass('hideme')。

JS Fiddle working example

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/

唯一的变化是在按钮被按id在JavaScript部分所选的两行。 JavaScript的其余部分使用DOM方法中构建的JavaScript。

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有误(似乎是的jsfiddle默认)lybrary MooTools的我在标题我需要jQuery的说,我不Mootools的理念,我不知道如何去适应你的代码的jQuery,你能与jQuery,请做到这一点。这将是伟大的! – Nrc 2013-02-01 18:06:53

+0

我更新了jQuery代码的答案和测试工作的jQuery的jsfiddle。 – freegnu 2013-03-09 13:38:00

+0

好,完美!链接谢谢 – Nrc 2013-03-09 16:50:54

1

你不需要使用jQuery选择器来获取游戏呃,你应该为玩家指定一个ID“例如“玩家””从这一点,你可以简单地做player.playVideo();

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

编辑: 要隐藏播放器,你可以使用$(‘#播放器’)隐藏();因为它会隐藏。内嵌框架:)

+0

笑10秒比我快(一个例子: – 2012-07-18 13:31:32

+0

我认为它不工作或有件事我不明白,你可以在这里表现出来的http?: //jsfiddle.net/8kN6Z/5/ – Nrc 2012-07-18 14:29:36

0

棒这在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>​ 
+0

请尝试在一个小提琴,codepen ......我认为这是行不通的http://codepen.io/anon/pen/Carwu 的http://的jsfiddle。净/ 8kN6Z/ – Nrc 2012-07-18 15:39:13

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>