【问题标题】:Vimeo API not detecting play eventVimeo API 未检测到播放事件
【发布时间】:2017-01-07 13:17:08
【问题描述】:

我正在尝试使用 hte vimeo js api 检测播放按钮的点击。这是我的代码:

html:

<iframe id="video" src="https://player.vimeo.com/video/21777784?api=1" width="640" height="360" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

和 JS:

        var iframe = document.getElementById('video');
        var player = $f(iframe);

        player.on('play', function() {
            console.log('played the video!');
        });

目前我没有在控制台中记录任何内容。我稍后在 DOM 中确实有另一个使用 Vimeo API 的函数,它似乎工作正常:

        jQuery("body").on("click",".watch-vid-cta",function(){
              player.api("play");
        });

我直接从他们的 API 中得到了代码,所以不确定我做错了什么:

https://github.com/vimeo/player.js

【问题讨论】:

    标签: javascript vimeo vimeo-api


    【解决方案1】:

    这里好像有两个问题。

    首先:vimeo最近发布了它的新api(2016),它与以前的不兼容。您提供的代码是两个 api 的混合,player.api("play") 是旧语法,而新语法是 player.play()。 当您的第二个功能正常工作时,我会假设您使用的是旧 api(称为 froogaloops)。 vimeo 的 github 页面包含您可能需要迁移的所有说明,而且非常简单。

    第二:在新的api中,似乎你混合了事件监听器player.on('play', function() {}在播放器播放时做某事和play()方法,用于播放播放器。

    使用新的 api,您的代码可能如下所示:

    html:

    <button type="button" id="playButton">Play</button>
    

    那么你需要在你的页面中包含 api

    <script src="https://player.vimeo.com/api/player.js"></script>
    

    最后是你的 js:

    var iframe = document.querySelector('iframe');
    var player = new Vimeo.Player(iframe);
    
    function vimeoPlay(){
        player.play().then(function(){
        })
        .catch(function(error) {
            switch (error.name) {
                case 'PasswordError':
                    break;
                case 'PrivacyError':
                    break;
                default:
                    break;
            }
        });
    }
    
    document.getElementById("playButton").onclick = function (){vimeoPlay()}
    

    这里的player.play() 方法有一个promise .then(function{}),这使您可以在播放器播放后执行某些操作,因此每次调用vimeoPlay 函数时只需单击一次按钮即可。

    希望对你有帮助

    编辑:

    关于您的评论,我相信您正面临第一个问题。

    如果包含 player.api("play") 的第二个函数有效,则可能意味着您使用旧 api (froogaloops) 与新 api (2016) 一样,它将是 player.play()

    如果是这样,你不能指望player.on('play', function() {console.log('played the video!');}); 工作,因为它是新 api 的语法。

    你应该仔细检查你使用的是哪个版本的api,旧的和新的链接分别是:

    <script src="https://f.vimeocdn.com/js/froogaloop2.min.js"></script>
        //versus
    <script src="https://player.vimeo.com/api/player.js"></script>
    

    如果您确实希望收听播放事件,那么您可以使用新的 api 试试这个

    <iframe id="video" src="https://player.vimeo.com/video/21777784"></iframe>
    <script src="https://player.vimeo.com/api/player.js"></script>
    <script type="text/javascript">
    var iframe = document.querySelector('iframe');
    var player = new Vimeo.Player(iframe);
    
    player.on('play', function() {
        console.log('played the video!');
    });
    </script>
    

    我强调您对嵌入视频的方式和我的方式之间的差异的关注,您不应该在新的 api 中添加 ?api=1

    <iframe id="video" src="https://player.vimeo.com/video/21777784?api=1"></iframe>
        //versus
    <iframe id="video" src="https://player.vimeo.com/video/21777784"></iframe>
    

    以及您设置变量的方式与我之间的差异:

    var iframe = document.getElementById('video');
    var player = $f(iframe);
        //versus
    var iframe = document.querySelector('iframe');
    var player = new Vimeo.Player(iframe);
    

    如果您在同一页面上有多个 vimeo 视频,您可能会为您的 vimeo iframe 分配一个 id,例如 vimeoPlayer1vimeoPlayer2 并写入

    <iframe id="vimeoPlayer1" src="https://player.vimeo.com/video/21777784"></iframe>
    <iframe id="vimeoPlayer2" src="https://player.vimeo.com/video/21777784"></iframe>
    
    var vPlayer1 = document.getElementById("vimeoPlayer1");
    var player1 = new Vimeo.Player(vPlayer1)
    
    var vPlayer2 = document.getElementById("vimeoPlayer2");
    var player2 = new Vimeo.Player(vPlayer2)
    

    最后,您可以通过将player.api("play") 替换为player.play() 来升级您的第二个功能(但如果这里发生其他事情,我对jQuery 不满意):

    【讨论】:

    • 嗨,所以你的解决方案并不是我真正想要的。我试图检测用户何时点击视频而不是按钮上的播放。视频功能正常
    • @BenLiger :我已经更新了我的答案,希望你现在能找到你需要的东西。
    猜你喜欢
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2016-01-03
    • 2014-12-15
    相关资源
    最近更新 更多