Facebook 喜欢视频自动播放和暂停

2024-01-04

在我的网站上有一个包含许多视频的页面。当 iframe 视频在视口中完全可见时,视频应自动播放。当视频移动到视口上方时,视频应该暂停,就像我们在 Facebook 中看到的那样。

Note:我在用着iframe, 但不是html5视频元素。


虽然 SO 不是请求代码的地方,但由于挑战以及其他需要这个想法的人,我会回答这个问题。

所以,我正在使用jquery.inview https://github.com/protonet/jquery.inview用于检测 iframe 何时位于视口中的插件。

另外,我正在使用youtube api https://developers.google.com/youtube/v3/code_samples/javascript控制视频的 iframe。

解释每一行的工作原理并不容易,因此请阅读代码,如果您有疑问,请发表评论。

这是完整的代码(它是not出于安全原因在该网站上工作,以便您可以看到实时情况http://output.jsbin.com/soqezo http://output.jsbin.com/soqezo)

// Inject YouTube API script
var tag = document.createElement('script');
tag.src = "//www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);


var players = [];
function onYouTubePlayerAPIReady() {
  $('iframe').each(function() {
    var ifr = $(this),
        player = new YT.Player(ifr[0].id);

    ifr.data('player', player);
    players.push(player);
  });

  initInView();
}

function pausePlayers() {
  for (var i in players) {
    players[i] && players[i].pauseVideo && players[i].pauseVideo();
  }
}

function initInView() {
  $('div').each(function() {
    $(this).on('inview', function(event, isInView) {
      if (isInView) {
        // element is now visible in the viewport
        pausePlayers();
        var player = $(this).find('iframe').data('player');
        if (player) {
          player.playVideo && player.playVideo();
        }
      } else {
        // element has gone out of viewport
        //$(this).find('iframe').data('player').pauseVideo();
      }
    });
  });
}
html, body, div {
  height:100%;
}

div {
  width:100%;
  height:100%;
  background:red;
  margin-bottom:100px;
}

iframe {
  width:100%;
  height:100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.inview/0.2/jquery.inview.min.js"></script>

<div>
    <iframe src="//www.youtube.com/embed/FKWwdQu6_ok?enablejsapi=1" frameborder="0" allowfullscreen id="video1"></iframe>
</div>
<div>
    <iframe src="//www.youtube.com/embed/FKWwdQu6_ok?enablejsapi=1" frameborder="0" allowfullscreen id="video2"></iframe>
</div>
<div>
    <iframe src="//www.youtube.com/embed/FKWwdQu6_ok?enablejsapi=1" frameborder="0" allowfullscreen id="video3"></iframe>
</div>
<div>
    <iframe src="//www.youtube.com/embed/FKWwdQu6_ok?enablejsapi=1" frameborder="0" allowfullscreen id="video4"></iframe>
</div>
<div>
    <iframe src="//www.youtube.com/embed/FKWwdQu6_ok?enablejsapi=1" frameborder="0" allowfullscreen id="video5"></iframe>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Facebook 喜欢视频自动播放和暂停 的相关文章

随机推荐

  • 更新mysql中的序列化数组(不进行反序列化?)

    我读过的所有内容都说在 Mysql 中存储序列化数组是一个坏主意 我已经知道了 不幸的是 我正在使用使用此方法的开源脚本 并且在这种情况下更改结构不是一个选项 是否可以在不先反序列化的情况下更新此 URL 我最初尝试使用替换 但它抛出一个错
  • nio中服务器不接受多个客户端

    我正在尝试构建一个聊天应用程序 我有一个将数据从客户端发送到服务器的代码 当一个或多个客户端登录时 当客户端程序运行一次或多次时 服务器将不接受除第一次连接之外的其余连接 请帮我解决这个问题 这是我的代码 public class Serv
  • JavaScript 不加载 WordPress 页脚

    我最近开始学习Javascript 我正在尝试将一个小脚本添加到我的 WordPress 网站页面的页脚中 我正在使用 插入页眉和页脚 插件 但是 该脚本似乎未加载 我不认为这是语法问题 因为类似的脚本可以在不同的站点上运行 但是 我无法弄
  • 如何解决android中添加内容之前必须调用requestFeature()

    我正在创建一个应用程序 其中包含当我们单击按钮时在警报对话框中弹出的简单而小的注册表单 但它显示了一个名为的错误android util AndroidRuntimeException 添加内容之前必须调用 requestFeature 请
  • Go 中的 var 与 :=

    在此处的 Go Web 服务器示例中 http golang org doc effective go html web server http golang org doc effective go html web server 以下代
  • 同一 Ubuntu 机器上的多个 Python 版本

    我在 Ubuntu 机器上 自动安装了 Python 3 10 为了在共享代码库中执行给定任务 我需要使用 Python 3 9 来解决新版本的一些问题 我希望在我的机器上安装这两个Python 并且能够使用这两个Python 并在需要时进
  • Xcode4 显示所有输出(删除“仅显示前 200 个通知”)

    Apple在Xcode4最新版本中添加了新bug 如果输出超过200行 则全部删除 显然 如果有输出 那么它的存在是有原因的 我需要看到它 我尝试寻找首选项 GUI 或按钮 但找不到任何内容 他们肯定没有对其进行硬编码以防止您看到自己的输出
  • 使用 Node.js 进行 SOAP 请求

    嗨 任何人都可以帮助我吗 如何请求 SOAP Web 服务并获取 xml 响应 塞纳里奥 使用soap ui 我发送带有用户名 密码身份验证的wsdl url 并且我还将发送soap xml数据 然后我会得到响应 如何使用 Nodejs 或
  • 如何将 Either 转换为 MonadThrow

    我有一个通过处理错误的函数Either funErrViaEither a gt Either SomeException b 我想在另一个应该更灵活并返回的函数中使用这个函数MonadThrow m funErrViaThrow Mona
  • JavaFX 冻结问题

    我正在摆弄 JavaFX API 由于某种原因 这个应用程序似乎在 看似 随机的时间后冻结了 它是一个制作红绿渐变图案的应用程序 并且有一个很酷的动画与之配合 当应用程序运行时 按 Enter 键 动画就会开始 一段时间后 就像我之前所说的
  • 如何在 gitignore 中使用条件

    我管理着几个pdf and graffle使用 git 生成文件 我想添加pdf仅当以下情况时才将文件存储到存储库graffle具有相同文件名的文件不存在 例如 G 只添加foo pdf and bar graffle进入目录中的存储库 l
  • 如何更改 wp7 中列表框项目的可见性属性?

    例如 有一个列表框
  • 让lua脚本等待/暂停/睡眠/阻塞几秒钟的最简单方法?

    我不知道如何让 lua 执行任何常见的计时技巧 例如 sleep 停止线程上的所有操作 暂停 等待 不要继续下一个 命令 但允许其他代码 申请继续 阻止 不要继续执行下一个命令 直到 当前返回 我读过 while os clock
  • 如何在 Swift 中使用 NSURLSessionDataTask [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 有人能帮我吗 我找不到完成语法的好例子 var url NSURL NSURL URLWithString https itunes app
  • 反射:如何使用参数调用方法

    我试图通过带有参数的反射来调用方法 我得到 对象与目标类型不匹配 如果我调用一个不带参数的方法 它工作得很好 如果我调用该方法 则基于以下代码Test TestNoParameters 效果很好 但是如果我打电话Test Run 我得到一个
  • 合并 2 个分支时 Xcode 6.0.1 崩溃

    每次我尝试将一个分支合并到另一个分支时 Xcode 6 0 1 都会崩溃 到目前为止我有 尝试从另一台计算机合并相同的分支 显然之前推送和拉动它们 但它仍然崩溃 从 错误分支 创建一个新分支 在其中添加一个空格 并将其成功合并回 错误分支
  • 如何从 Objective-C 中的其他类访问 IBOutlet?

    我如何访问IBOutlets是在另一个类中创建的吗 例如 如果我有一个IBOutlet in Class A我怎样才能访问Class B 如果我无法访问IBOutlets来自其他课程的解决方法是什么 你需要让你的IBOutlet a pro
  • 获取存储在 React Native 文档目录中的文件名数组

    CASE 我已将音频文件下载到名为 tracks 的文件夹下的文档目录 如下所示 RNFetchBlob fs dirs DocumentDir tracks 毫无疑问 我可以按每个音频的名称来阅读它们 RNFetchBlob fs dir
  • 更新 Android Studio 3.1 后,发布签名的 APK 时出现错误

    将我现有的项目迁移到 Android Studio 3 1 后 它无法编译 以下是日志详细信息 org gradle api tasks TaskExecutionException 任务 app mergeReleaseResources
  • Facebook 喜欢视频自动播放和暂停

    在我的网站上有一个包含许多视频的页面 当 iframe 视频在视口中完全可见时 视频应自动播放 当视频移动到视口上方时 视频应该暂停 就像我们在 Facebook 中看到的那样 Note 我在用着iframe 但不是html5视频元素 虽然