【问题标题】:player.stopVideo, player.playVideo, etc. not working outside of event functions calls with youtube-apiplayer.stopVideo、playVideo 等在使用 youtube-api 的事件函数调用之外不起作用
【发布时间】:2019-10-30 03:10:59
【问题描述】:

我正在尝试创建一个按钮,允许用户单击它并停止嵌入的 youtube 视频。但是,每当我尝试调用播放器对象本身以使用函数 player.playVideo() 时,我都会收到一条错误消息,指出该函数未定义。

播放器是在加载 Youtube API 时全局定义和设置的(就像他们网站上的教程一样)。当事件触发它们的使用时,对 playVideo 的函数调用工作得很好,但在这些事件之外使用它根本不起作用。

'''javascript
// 2. This code loads the IFrame Player API code asynchronously.
var tag = document.createElement('script');

tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

var player;
function onYouTubeIframeAPIReady() {
    isReady=true;
    player = new YT.Player('player', {
        height: '390',
        width: '640',
        videoId: 'M7lc1UVf-VE',
        events: {
            'onReady': onPlayerReady,
            'onStateChange': onPlayerStateChange
        }
    });
}

function onPlayerReady(event) {
    playVideo();
}

var done = false;
function onPlayerStateChange(event) {
    if (event.data == YT.PlayerState.PLAYING && !done) {
        setTimeout(stopVideo, 6000);
        done = true;
    }
}
function stopVideo() {
    player.pauseVideo();
}

function playVideo() {
    player.playVideo();
}

//The function that is run when the button is pressed, only in this case                      
 // stopVideo not work!
function togglePlay() {
    if(isPlaying) {
        stopVideo();
    } else {
        playVideo();
    }
}
'''

预期:Youtube 视频播放 实际:错误 player.playVideo is not a function

【问题讨论】:

  • 我想知道这是否与两个名为 playVideo() 的函数有关 - 一个在您的脚本中,另一个我假设在 YouTube API 中?或许可以尝试在 onPlayerReady 函数中使用 player.playVideo(),而不是调用另一个函数。
  • 感谢您的建议,但我相对确定不是这样,因为我已经尝试完全摆脱这些功能并简单地调用 player.playVideo,但它仍然存在同样的问题。
  • @jgordley 您可以使用 jsfiddle 创建代码的工作示例吗?的,通过仔细查看您的代码,我看到您在onPlayerReady 函数中添加了player.playVideo();。请改用event.target.playVideo();

标签: javascript html iframe youtube-api youtube-iframe-api


【解决方案1】:

我解决了这个问题。甚至在播放器完成加载之前设置具有使用播放器的 onclick 功能的按钮也会发生一些奇怪的事情。为了解决这个问题,我在 onPlayerReady(event) 函数中移动了所有按钮声明和函数,并使用了 event.target.play 或 event.target.pause,效果很好。我的建议是在 onPlayerReady 中包含任何使用 youtube 播放器功能的按钮声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2021-07-13
    • 2017-01-31
    • 1970-01-01
    • 2014-12-26
    • 2011-03-13
    • 2013-05-05
    相关资源
    最近更新 更多