jquery - 如果 currentTime 大于 X,则 HTML5 视频运行事件一次
问题描述
<video>
如果 a距离播放结束不到 30 秒,我试图触发一个 jquery 事件。但是,我只希望这个事件运行一次,无论 < 30 之后的位置如何,如果它已经触发,那么不要再这样做了。
我有以下通过 timeupdate 触发的代码,但它会currentTime
在播放结束后的 30 秒内反复触发。
如何调整为只运行一次?我不能简单地停止 timeUpdate,因为我用它来显示currentTime
视频,所以这会中断。
var video = $('#video');
function func() {
if ( video[0].currentTime > video[0].duration-30 ) {
console.log('You are less than 30 seconds from the end!');
}
}
video.on('timeupdate', function() {
func();
});
解决方案
为此,您可以使用标志来跟踪事件发生的状态。默认情况下,该标志将为假。currentTime
仅当视频距离结束不到 30 秒时才会设置为 true 。
您现在可以在 if 条件中使用此标志,以便它只会触发一次,如下所示:
var $video = $('video');
var $p = $('p');
var eventFired = false;
$video.get(0).volume = 0.2; // just for testing
function func() {
if (!eventFired && this.currentTime > this.duration - 30) {
eventFired = true;
$p.show();
}
}
$video.on('timeupdate', func);
p { display: none; }
video {
width: 300px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>You are less than 30 seconds from the end!</p>
<video autobuffer controls autoplay>
<source id="mp4" src="http://grochtdreis.de/fuer-jsfiddle/video/sintel_trailer-480.mp4" type="video/mp4">
</video>
推荐阅读
- iframe - 惰性尺寸不显示视频
- google-apps-script - 谷歌脚本从一张表中复制新添加的行并仅在第二张表中不存在时附加到另一张表中
- git - 有没有办法使用服务器端钩子(git)进行 RCS 关键字替换?
- regex - 匹配(和删除)仅包含特殊字符的单词
- javascript - 我的倒计时时钟应该倒计时一圈
- c++ - 我想要一个具有子函数的函数来访问相同的命名函数,而不依赖于它的子类的类
- java - 执行命令 mvn verify -U 时我的项目中有错误
- date - 工作日和月末标识
- java - ArrayList 的 remove() 方法不适用于 int 数组的 ArrayList (ArrayList
) 在 Java 中 - laravel - 在 Laravel 5.8 中禁用按钮