2012-07-18 81 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>