开发者问题收集

使用外部按钮切换播放/暂停 Youtube 视频

2017-01-25
5028

我有一个使用 fullPage js 构建的模板,用于创建滑动部分。该页面支持视频,但当用户将光标放在视频本身上方滚动时,滚动和手势会被禁用。同样,在移动设备上也观察到了这种行为。

为了解决这个问题,我使用一个覆盖 YouTube iframe 的空 div。这解决了滚动行为,但我还缺乏直接控制 YouTube 播放器的能力。我尝试使用 youtube API 和 jquery 来假装能够使用 youtube 播放器顶部的空 div 切换播放/暂停,但它不起作用。

http://codepen.io/lumpeter/pen/XpayeB

youtube 的主要代码是:

 function onYouTubePlayerReady(playerId) {
  ytplayer = document.getElementById("player");
  ytplayer.addEventListener("onStateChange", "onPlayerStateChange");
}

function onPlayerReady(event) {
        $('#video-button').click(function(event){
            ytplayer.playVideo();
        });
    }

function onPlayerStateChange(event) {
    if (event.data == YT.PlayerState.PLAYING) {
        $('#video-button').click(function(event){
            ytplayer.pauseVideo();
        });
    }
    else {
        $('#video-button').click(function(event){
            ytplayer.playVideo();
        });
    } 
}

有人能告诉我为什么它不起作用吗?我有事件侦听器来查找更改并使用布尔值来检测视频的状态以切换播放/暂停,但由于某种原因,它不像我预期的那样工作。

================更新==================

我还尝试了以下操作:

$(document).on('click', '#pauseVideo', function(){  
player = new YT.Player('myVideo')             
if (event.data == player.PlayerState.PAUSED) {
      $('#myVideo').get(0).contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}','*');
}

if (event.data == player.PlayerState.PLAYING) {
      $('#myVideo').get(0).contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}','*');

    }

});

但是,我收到错误“Uncaught ReferenceError:YT 未定义。”

2个回答

由于 fullpage.js 已经通过添加 ?enablejsapi=1 并为您加载 API 的 JS 脚本完成了部分工作,因此您只需执行以下操作:

var player;
window.onYouTubeIframeAPIReady = function() {
    player = new YT.Player('myVideo');
}

$(document).on('click', '#pauseVideo', function(){                       
      $('#myVideo').get(0).contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}','*');
});

在线复制

Alvaro
2017-01-26

谢谢 Alvaro!是的,我对 youtube api 的解决方案想得有点多了。我只需要使用带有二进制真/假语句的布尔值。超级简单,早该知道的。再次感谢您的帮助!

var player;
window.onYouTubeIframeAPIReady = function() {
    player = new YT.Player('myVideo',{
          events: { 'onStateChange': onPlayerStateChange }
        });
}

var isPlaying = true;



$(document).on('click', '#pauseVideo', function(){    
    if ( isPlaying == true){
      $('#myVideo').get(0).contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}','*');
      isPlaying = false;
    } else {
      $('#myVideo').get(0).contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}','*');
      isPlaying = true;
    }          
});
Peter Lum
2017-01-27