滚动播放 Html5 视频

2024-04-28

我正在一个 WordPress 网站上工作,下面的代码可以按照我想要的方式工作(只播放一次,最后出现“重播”按钮)

我希望它在滚动到 ie 时开始播放。在视口中。

我在这里看到了几种不同的方法来实现这一点,但我无法让它们与我当前的代码很好地配合。

HTML

<div class="spacer">

  </div>
  <div class="video-wrapper">
    <video id="bVideo" muted autoplay>
      <source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4" />
    </video>
    <div id="playButton" class="playButton" onclick="playPause()"></div>
    <div class="replayButton" id="replayButton" onclick="playPause()">REPLAY ↻</div>
  </div>
<script>


var bunnyVideo = document.getElementById("bVideo");
var el = document.getElementById("playButton");
var replay = document.getElementById("replayButton");
replay.style.visibility = "hidden";

function playPause() {
  if (bunnyVideo.paused) 
  {
    bunnyVideo.play();
      replay.className = "replayButton";
  replay.style.visibility = "hidden";
  } 
  else 
  {
    bunnyVideo.pause();
    el.className = "playButton";
    replay.className = "";
  }
}

function playPauseControls() {
  if (!bunnyVideo.paused) {
    el.className ="";
    replay.className = "";
  } else {
     el.className = "playButton";
     replay.className = "";
  }
}

function videoEnd() {
  replay.className = "replayButton";
  replay.style.visibility = "visible";
  el.className = "";
  }




function showControls(){
  bunnyVideo.setAttribute("controls","controls");
}
function hideControls(){
  bunnyVideo.removeAttribute("controls","controls");
}

/*Google Analytics Tracker Function*/
/*Assuming you've already set up the Google Analytics script function on your webpage. This just activates a trigger event when the video plays.*/
/*function bunnyVideoView() {
     ga('send', 'event', { 
          'eventCategory': 'Bunny Video',
          'eventAction': 'play',
          'eventLabel': 'Bunny Video View'
     });
}*/


bunnyVideo.addEventListener("play", playPauseControls, false);
bunnyVideo.addEventListener("pause", playPauseControls, false);
bunnyVideo.addEventListener("mouseout", hideControls, false);
bunnyVideo.addEventListener("ended", videoEnd, false);
/*Google Analytics Tracker*/
/*bunnyVideo.addEventListener("play", bunnyVideoView, false);*/

</script>

CSS

.spacer {
  height: 400px;
}

.video-wrapper {
  position: relative;
  max-width: 680px;
}

.video-wrapper > video {
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
    vertical-align: middle;
    cursor: pointer;
}

/* Hide iOS Play Button */
video::-webkit-media-controls-start-playback-button {
    display: none!important;
    -webkit-appearance: none;
}


.playButton {
  border-radius: 100px;
  border: 8px solid #fff !important;
  height: 100px;
  position: absolute;
  width: 100px;
  margin: auto;
  top: 0;
  bottom: 0;
  right: 0;
  left: 0;
  cursor: pointer;
  display: block;
  opacity: 0.95;
  transition: opacity 400ms;
}

.playButton:before {
  content: "";
  display: block;
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 25px 0 25px 50px;
  border-color: transparent transparent transparent #fff;
  position: absolute;
  top: 0;
  left: 0;
  right: -10px;
  bottom: 0;
  margin: auto;
}

.replayButton {
    color: black;
  position: relative;
    text-align: center;
  margin: auto;
    margin-top: 0px;
  cursor: pointer;
  display: block;
  opacity: 0.95;
  transition: opacity 150ms;
}

.replayButton:hover, .replayButton:focus {
  color: #ea7200;
}

.replayButton:before {
  height: 45px;
  width: 45px;
  position: absolute;
  top: 18px;
  left: 18px;
  content: '';
  display: block;
  border-color: transparent white white white;
  border-radius: 50%;
  border-style: solid;
  border-width: 8px;
  -webkit-transform: rotate(-90deg);
  transform: rotate(-90deg);
}
.replayButton:after {
  border-color: transparent transparent transparent white;
  border-style: solid;
  border-width: 0 45px 22px 22px;
  height: 0;
  position: absolute;
  top: 40px;
  left: 15px;
  bottom: 0;
  right: 0;
  width: 0;
  content: "";
  display: block;
  margin: auto;
}

https://jsfiddle.net/ag3sowbg/ https://jsfiddle.net/ag3sowbg/


我前段时间必须解决类似的任务。

首先,添加一个绝对位于视频包装器的死点的空元素。

接下来,将视口的“带”定义为视频触发器的跟踪区域。

On window.scroll您只需检测碰撞触发器是否进入或离开触发区域,然后播放或暂停视频即可。

我希望这有帮助:代码笔链接 https://codepen.io/huuuda/pen/eroRjb

PS:我可能会非常小心地添加自定义播放/重播按钮,因为不同浏览器中的许多媒体播放器都使用自己的媒体播放器(Safari、Firefox),并且您很可能最终会彼此拥有两个(浏览器默认值总是获胜,请注意)你)。去过那里:)如果不是必需的,就放弃它们......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

滚动播放 Html5 视频 的相关文章

  • codePointAt 和 charCodeAt 之间的区别

    有什么区别String prototype codePointAt and String prototype charCodeAt 在 JavaScript 中 A codePointAt 65 A charCodeAt 65 从 MDN
  • Durandal SPA 与打字稿有关的问题

    我使用 TypeScript 1 8 将我的 durandal SPA 应用程序从 VS 2012 更新到 VS 2015 它将生成 JavaScript ECMA5 我解决了所有构建错误 但我无法修复一个名为 return 语句只能在函数
  • 当key未知时如何获取js对象中的属性值

    我有一个对象数组 a 81 25 p 81 25 81 26 p 81 26 我想循环遍历数组并获取值p在每个元素中 for var key in a console log a key outputs 81 25 Object How d
  • 如何使用 JavaScript 压缩文件?

    有没有办法使用 JavaScript 来压缩文件 例如 在雅虎邮件中 当您选择下载电子邮件中的所有附件时 它会被压缩并下载到单个 zip 文件中 JavaScript 能够做到这一点吗 如果是这样 请提供一个编码示例 我发现这个图书馆叫js
  • AngularJS 服务并承诺最佳实践

    我有一个 AngularJS 应用程序services 调用 http资源并返回promise我在控制器中解决了这个问题 这是我正在做的事情的示例 app service Blog function http q var deferred
  • 如何将 vue3-openlayers 插件添加到 nuxt

    我有以下 main ts 文件Vue3 https v3 vuejs org import createApp from vue import App from App vue How to do this in nuxt3 import
  • 当系列没有相同的时间值时,如何在工具提示中显示所有系列

    我有一个显示多个时间序列的图表 不同时间序列不会同时采样 有没有办法在工具提示中显示所有系列 在示例中 您可以看到所有系列都包含在前 2 个点的工具提示中 因为它们是同时采样的 其余点仅包含 1 个系列 var myChart echart
  • 如何在没有 jQuery 或延迟加载的情况下推迟背景图像

    根据帕特里克 塞克斯顿tutorial https varvy com pagespeed defer images html 我想以与这里相同的方式推迟背景图像img img src data image png base64 R0lGO
  • Nodejs 异步 Promise 队列

    我需要使用速率受限的 API 例如 我一秒钟只能进行 10 个 API 调用 因此我需要等待当前秒结束才能进行另一个 API 调用 为了实现这一目标 我想创建一个可以自行管理的异步队列 它的主要功能是让我向队列添加一个新的 Promise
  • 如何将类组件中的 props 发送到功能组件?

    我是 ReactJS 的初学者 需要知道如何将一个页面中的 props 值发送到另一个页面 道具位于第一页上我可以获取类组件值如何获取另一页中的值 提前致谢 墙色 jsx import React Component from react
  • 如何让导航栏在向下滚动页面时改变颜色?

    我希望导航栏是透明的 但是当您向下滚动页面时 它会变为红色 div class nav div class container div class logo a href img src RepublicSquare logo svg st
  • 如何在 Node.js 中打开 Windows-1255 编码文件?

    我有一个 Windows 1255 希伯来语 编码的文件 我希望能够在 Node js 中访问它 我尝试使用打开文件fs readFile 它给了我一个Buffer我无能为力 我尝试将编码设置为Windows 1255 但这没有被识别 我还
  • Android 4 上的 html5 视频:全屏播放然后重定向到另一个网页 - 不起作用

    我正在为 Android 4 智能手机设计一个 html5 页面 其中包含一个 3gpp 或 mp4 视频 打开时必须自动全屏播放 当视频结束时应该重定向到另一个网址 一些谷歌搜索告诉我 Android 4 上不再允许自动播放 因此我选择显
  • 使用 jQuery 获取 JSON Facebook Graph API 用户信息

    我正在尝试使用图形 API 来获取有关用户的一些基本信息 无需用户授权 只需获取公共详细信息 我正在尝试使用 jQuery 和 getJSON 来获取数据并解析它 但我很难弄清楚如何访问我想要的键值对 我想要有类似的东西 var fburl
  • 反转比例函数

    这对我来说很有趣 看下面的D3代码 var scale d3 scale linear domain 100 500 range 10 350 scale 100 Returns 10 scale 300 Returns 180 scale
  • 如何从 Visual Studio Code API 打开浏览器

    我只是在探索一种从用于开发扩展的 Visual Studio Code API 打开默认浏览器的方法 以下是我的代码 var disposable vscode commands registerCommand extension brow
  • 如何在 getStaticPaths 内添加 params 值数组

    我有一个页面 其结构如下 read slug number 我想要得到slug每个对应的值number in the getStaticPaths这是代码 export async function getStaticPaths const
  • 如何加载Jquery Tiny滚动条

    所以我想自定义一个滚动条 我发现了一个很小的滚动条 这是一个jquery插件 http baijs nl tinyscrollbar http baijs nl tinyscrollbar 问题是 无论如何我都无法让它工作 我将 Jquer
  • 如何在控制台中隐藏日志消息的来源?

    当将消息输出到控制台时 还会显示源代码 在 Chrome 开发者工具中 它位于右侧 console log Foo Source Foo test js 1 Output 但是 在某些网站上 会显示消息without正在显示的源 例如Fac
  • 带有 .htaccess 的漂亮网址?

    我刚刚创建了一个新的 WordPress 页面模板 在其中运行一些 php mysql 脚本 我想对其子页面应用 mod 重写 例如我生成了以下链接 http www quotist com quotes by authors html l

随机推荐

  • Linux环境下串口数据转换为TCP/IP

    我需要从Linux系统的串口获取数据并将其转换为TCP IP发送到服务器 这很难做到吗 我有一些基本的编程经验 但对 Linux 的经验不多 有没有开源应用程序可以做到这一点 在 Linux 中您不需要编写程序来执行此操作 只是pipe h
  • 如何检测UITableView的滚动?

    有一个与此类似的问题 但答案非常笼统 模糊 检测 UITableView 滚动 https stackoverflow com questions 1587855 detecting uitableview scrolling 请不要驳回
  • 如何阻止 Firefox 在按住 Ctrl 键的情况下在新选项卡中打开 gridview 标头排序回发链接

    我试图让 ASP Net 中的 gridview 控件根据用户在尝试通过单击列名称进行排序时是否按下 Ctrl 键进行多重排序 问题是 当我使用 Firefox 时 如果我按下 Ctrl 键单击列名称 浏览器会尝试在新选项卡中打开 java
  • 有没有java对象到对象映射的工具? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • SKPaymentTransaction:transactionDate 到底是什么?

    在苹果的文档中transactionDate is 交易添加到 App Store 支付队列的日期 只读 我只是想澄清一下在以下情况下 transactionDate 是什么 在时间 T1 购买了一些东西 交易日期是 T1 在时间 T2 恢
  • 在浮动元素周围放置边框

    假设我有类似以下代码的内容 我想在左右浮动的两个图像之间显示一些文本 img src testImage1 png alt Test Image 1 img src testImage2 png alt Test Image 2 p Tes
  • 如何减少 MediaCodec 视频/avc 解码中的延迟

    我执行了一些简单的计时电影播放器 java https github com google grafika blob master src com android grafika MoviePlayer java in the Grafik
  • Mongoose findOneAndUpdate 如何知道对象是否存在以及是否被修改

    我在用findOneAndUpdate猫鼬的方法 function update one record Model unique constraint new updated values obj Model findOneAndUpdat
  • 如何在 http POST 请求中发送 HTML 代码?

    我正在从 Google Web Toolkit 应用程序向 php 脚本发送 HTTP POST 请求 内容类型现在是 application x www form urlencoded 所以我可以将变量发送到 php 并使用 POST 在
  • 使用斐波那契堆时 Dijkstra 是否更快?

    使用斐波那契堆时 Dijkstra 是否比使用二进制堆更快 我自己做了一些实现斐波那契堆的实验 并在 Dijkstra 中使用它 我还检查了 fibheap 库中现成的斐波那契堆 但没有一个实现能够更快地找到使用以下命令的最短路径 二进制堆
  • 多列多对一

    我有一个遗留数据库和两个表之间一对一的关系 问题是关系使用两列 而不是一列 在 nhibernate 中是否有某种方法可以说 当获取引用的实体时 它在 join 语句中使用了两列 而不是一列 我有一个类似的表结构 任务进度 进度ID Tas
  • 从纬度和经度获取 Windows TimeZoneInfo

    在网络应用程序中 我让人们输入他们的地址 然后我使用Google 的地理编码 API获取他们的纬度和经度 接下来 我想得到他们的Windows 时区名称使用这些坐标 这样我就可以处理夏令时正确通过 NetTimeZoneInfo objec
  • 尝试使用 Redshift SQL 对累积不同实体进行计数

    我正在尝试获取某个时间序列中 Redshift 中不同对象的累积计数 最简单的事情就是使用COUNT DISTINCT myfield OVER ORDER BY timefield DESC ROWS UNBOUNDED PRECEDIN
  • 我怎样才能残酷无情地中止 Java 中的任务?

    我用 Java 编写了一个数独求解器作为作业 目前我正在尝试找出它可能面临的有问题的输入 以使其变得更好 我已经生成了几千个数独网格David Bau 的数独生成器 http davidbau com archives 2006 09 04
  • WEKA 的重采样过滤器 - 如何解释结果

    我目前正在努力解决机器学习问题 而我必须处理大量不平衡的数据集 也就是说 有六个类 1 2 6 不幸的是有例如对于 1 类 有 150 个示例 实例 对于 2 有 90 个实例 对于 3 类 只有 20 个实例 所有其他类都无法 训练 因为
  • 优化 Web 应用程序开发策略

    如今 许多网络应用程序正在使用它们自己无法使用的 API 或代码 并且通常使用效率低下 我想到了一些谷歌地图混搭 对于 php asp 后端 HTML javascript 尤其是现在所有的 AJAX 存在许多潜在的瓶颈 问题 低效率和双重
  • 直接将函数与匿名函数传递给 then Promise 回调

    我试图理解这三个选项之间的区别 then myCallback then myCallback then gt myCallback The myCallback函数不返回任何内容 仅用于其副作用 因此我不需要它将任何内容传递回承诺链 我不
  • Magento:两种基于重量的统一运费

    尝试按如下方式设置我的运费 如果购物车总重量低于 1 公斤 则运费为 3 68 英镑 如果购物车总重量超过 1 公斤 则运费为 6 68 英镑 如果购物车总价超过 100 英镑 则免运费 我设法使用 6 68 英镑的统一费率将所有这些结合在
  • 如何获取带有完整月份名称的完整日期,例如 2015 年 11 月 2 日

    我想将完整月份的日期加载到文本框中 这意味着用户每次想要在文本框中保存日期时都会获得当前日期和时间 他们不会写任何东西 这是我想要的格式 2015 年 11 月 2 日 但没有得到我想要的结果 我得到了这个结果 DD NOV 2015 但这
  • 滚动播放 Html5 视频

    我正在一个 WordPress 网站上工作 下面的代码可以按照我想要的方式工作 只播放一次 最后出现 重播 按钮 我希望它在滚动到 ie 时开始播放 在视口中 我在这里看到了几种不同的方法来实现这一点 但我无法让它们与我当前的代码很好地配合