【问题标题】:Trigger an event in javascript before a video has ended在视频结束之前在 javascript 中触发事件
【发布时间】:2014-07-30 11:28:37
【问题描述】:

我有一个淡入淡出的视频,播放时间为 ca。 25 秒,淡出,等待 30 秒,然后再次淡入。视频结束后,我使用以下方法触发播放:

$('.header-video').get(0).onended = function(e) {
  $(this).fadeOut(200);

  setTimeout(function(){
    playVideo();
  },8000);
}

问题是在视频真正停止播放之前不会开始淡入淡出,所以我想知道是否有一些聪明的方法可以在视频结束前几秒钟获得一个事件? (可能不会)

或者,我可以只为视频计时并触发一个计时事件,但也许这里有人可以想到一些很酷的魔法,使我能够以一种比手动为视频计时更动态的方式来完成它。

【问题讨论】:

  • 视频具有 durationcurrentTime 属性。您可以只使用 setInterval 来检查何时currentTime > duration - 3000
  • 当然应该想到这一点。将其发布为答案,我会接受。

标签: javascript jquery video


【解决方案1】:

您可以使用在视频的 currentTime 属性更新时触发的 timeupdate 事件。

参考:https://developer.mozilla.org/en-US/docs/Web/Events/timeupdate

例子:

$(document).ready(function(){

    $( '.header-video' ).on(
        'timeupdate', 
        function(event){

            // Save object in case you want to manipulate it more without calling the DOM
            $this = $(this);

            if( this.currentTime > ( this.duration - 3 ) ) {
                $this.fadeOut(200);
            }

        });

});

JSFiddle

【讨论】:

  • +1 但在.get(0) 之后,您将不会有.on 事件。 $( '.header-video' ).on 可以正常工作
  • 谢谢@RGraham,我会用一些更好的代码和示例更新答案。
  • 是的,我在试用时也发现了这一点。 .get(0) 用于获取 DOM 对象,而 .on 用于获取 jQuery 对象。而且我看到您还发现持续时间以秒为单位,而淡入淡出以毫秒为单位,所以我基本上得到了与您更新它相同的结果。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 2019-04-23
  • 1970-01-01
相关资源
最近更新 更多