HTML5 <video> 回调?

IT技术 javascript jquery video html html5-video
2021-03-14 18:10:30

我正在为客户开发一个网站,他们坚持使用 HTML5 的视频标签作为其某些视频内容的交付方式。我目前在http://videojs.com/ 的帮助下启动并运行它来处理 Internet Explorer Flash 回退。

他们让我做的一件事是,在视频播放完后(它们的长度都不同),将它们淡出,然后用一张图片代替视频——把它想象成一个海报框架该视频。

这甚至可能吗?您能否通过 Javascript 或其他方法获取当前正在播放的电影的时间码?我知道 Flowplayer ( http://flowplayer.org/demos/scripting/grow.html ) 有一个 onFinish 功能,这是我应该采用的路线来代替 HTML5 视频方法吗?IE 用户将获得 Flash 播放器这一事实是否需要两个单独的解决方案?

任何投入将不胜感激。我目前在网站上使用 jQuery,所以如果可能的话,我想将解决方案保留在该领域。谢谢!

3个回答

您可以在此处查看规范中的完整事件列表

例如:

$("video").bind("ended", function() {
   alert("I'm done!");
});

您可以像 jQuery 中的任何其他内容一样绑定到元素上的事件……至于您的评论问题,无论您为 IE 提供什么元素,是的,它都需要一个单独的处理程序来绑定它提供的任何事件。

关于时间码的另一个问题,timeupdate事件在播放durationchange时发生事件发生在整体持续时间变化时。您可以绑定并使用它们,就像我在ended上面事件中展示的那样随着timeupdate你可能会想的currentTime财产,有durationchange你想要的duration属性,每一个你直接关闭DOM对象,就像这样:

$("video").bind("durationchange", function() {
   alert("Current duration is: " + this.duration);
});
@Eric - 如果没有其他任何错误,我不能确定没有媒体文件,但是删除onfrom onended,这只是ended在您调用时.bind(),与onmouseover事件相同,只是mouseover例如。
2021-04-27 18:10:30
尼克,感谢您的快速答复。整个站点中只有几个视频,并且所有视频的行为都相似,但对此的快速测试表明,在 Firefox、Safari 和 Chrome 中取得了成功。由于 Flowplayer 为 IE 提供服务,我将使用内置的 onFinish 函数来保持一致性。你摇滚!
2021-05-07 18:10:30
@Eric - 我这里有一个旧的测试页面,在 chrome 上工作,我在 6 上工作,但是当我制作它时,它在 5 中工作),不确定其他哪些......不过,如果浏览器,它们只是正常事件支持他们这应该有效。
2021-05-10 18:10:30
您能否快速浏览一下我的旧(未答复)帖子 stackoverflow.com/questions/2925851 /... 如果您发现问题,请告诉我?
2021-05-20 18:10:30

有一个与视频标签关联的 OnEnded 事件。但是,它在当前版本的 Google Chrome 中对我不起作用。

HTML 5 Video OnEnded 事件未触发

另见

检测 HTML5 视频何时结束

对于通用解决方案(支持带回退的视频标签,请参阅)

http://camendesign.com/code/video_for_everybodyhttp://www.kaltura.org/project/HTML5_Video_Media_JavaScript_Libraryhttp://www.mediafront.org/

这绝对有帮助,但是对于 IE 用户来说,他们是否需要一个单独的解决方案,在我的情况下,他们正在交付 Flash 播放器而不是本机视频?
2021-04-20 18:10:30
@Andrew:提出了三个使用视频标签的解决方案,但也提供了使用 Flash 视频的后备方案。
2021-04-29 18:10:30

我使用了这个代码。它基本上会重新加载视频,这将使海报再次显示。假设您希望最后的图像与海报相同。我在页面上只有一个视频,所以使用视频标签是有效的。我将视频设置为在页面加载时自动播放,因此我在重新加载后添加了暂停。

<script type="text/javascript">
    var video= $('video')[0]; 
    var videoJ= $('video');        
    videoJ.on('ended',function(){
        video.load();     
        video.pause();
    });
</script>