【问题标题】:Vimeo iFrame Play & Pause out of ViewportVimeo iFrame 在视口外播放和暂停
【发布时间】:2019-01-12 07:32:39
【问题描述】:

我正在尝试让嵌入的 Vimeo 视频在退出视口时暂停,并允许另一个嵌入的 Vimeo 视频在进入视口时播放。

我一直在探索各种解决方案,发现 Froogaloop 可以完美运行,但我相信是旧的 Vimeo api。

我得到了一个视频在退出时暂停的确切示例,但它使用的是 ID 而不是类,因此无法在多个视频上使用,并且不完全确定如何完成此操作。

Example - Jsfiddle

<div class="inner">
<iframe id="video" src="https://player.vimeo.com/video/220643186? 
autoplay=1&loop=1&color=357ded&title=0&byline=0&portrait=0" width="640" 
height="360" frameborder="0" webkitallowfullscreen mozallowfullscreen 
allowfullscreen></iframe>
</div>

查询:

 var iframe = document.getElementById('video');

// $f == Froogaloop
var player = $f(iframe);

var inner = $(".inner");
var elementPosTop = inner.position().top;
var viewportHeight = $(window).height();
$(window).on('scroll', function () {
    var scrollPos = $(window).scrollTop();
    var elementFromTop = elementPosTop - scrollPos;

    if (elementFromTop > 0 && elementFromTop < elementPosTop + viewportHeight) {
        inner.addClass("active");
        player.api("play");
    } else {
        inner.removeClass("active");
        player.api("pause");
    }
});

任何帮助将不胜感激:)

【问题讨论】:

    标签: jquery html video vimeo


    【解决方案1】:

    您需要不同的播放器对象 - 每个 iframe 一个。出于性能原因,您应该在 onScroll 函数之外创建玩家列表。

    var players = []
    $('.inner').each(function() {
      players.push({
          player: new Vimeo.Player($(this).find("iframe").get(0)),
          top: $(this).position().top,
          status: "paused"
      })
    });
    var viewportHeight = $(window).height();
    
    $(window).on('scroll', function() {
        var scrollPos = $(window).scrollTop();
        for(var i=0; i<players.length;i++) {
            var elementFromTop = players[i].top - scrollPos;
          var status = (elementFromTop > 0 && elementFromTop < players[i].top + viewportHeight) ? "play" : "pause";   
          if(players[i].status != status) {
              players[i].status = status;
              players[i].player[status]();
              console.log(i, status);      
          }
        }
    });
    

    你可以在这里测试:https://jsfiddle.net/oxf4dtn3/

    注意:任何视频都不能自动启动,如果它的声音是打开的。您可以使用参数“&muted=1”将 vimeo 视频静音

    【讨论】:

    • 嗨格弗里德,非常感谢您的帮助!这太棒了,我试过你的代码,我让它部分工作。我的视频实际上没有任何声音,并且都设置为自动播放,我注意到最顶部的视频在滚动后没有播放,我相信下面的视频尽管超出了视口,仍会继续播放。我把我实际在做什么的真实模型放在一起。第一个 jsfiddle 是用声音测试视频以确保它正在暂停。这是我最新的测试 - jsfiddle.net/Djsquid/43c9w27s/2
    • 你可以稍微调整一下你的状态...jsfiddle.net/Lp4wg320
    • 道歉我是 Jquery 的新手,我看到你添加的内容允许我控制/调整视口顶部的高度,这是否允许我控制视频的多少下面是在播放之前显示的吗?出于某种原因,只有视口顶部的视频会暂停,底部的视频不会。
    • 只需使用 +300 / -300 值即可。您还可以通过将视频的高度纳入计算来改进您的功能。也许这有帮助:stackoverflow.com/questions/39299291
    • 你能帮我解决我的问题吗?
    猜你喜欢
    • 1970-01-01
    • 2011-12-28
    • 2015-06-18
    • 2023-03-22
    • 1970-01-01
    • 2012-10-02
    • 2012-10-06
    • 2019-02-03
    • 1970-01-01
    相关资源
    最近更新 更多