当页面上的所有视频都已完全加载时,执行javascript
Execute javascript when all videos on page have been fully loaded
我修改了这个脚本以接受视频而不是图像:
http://www.catchmyfame.com/catchmyfame-jquery-plugins/jquery-beforeafter-plugin/
在本地,它运行良好,但当我上传到服务器时,视频不会同步。第一个视频比另一个更早开始。看看:
http://amarsyla.com/sandbox/beforeafter/
HTML:
<div id="container">
<div>
<video alt="before" autoplay="true" loop="true" width="600" height="366">
<source src="before.mp4" type="video/mp4;">
</video>
</div>
<div>
<video alt="after" autoplay="true" loop="true" width="600" height="366">
<source src="after.mp4" type="video/mp4;">
</video>
</div>
</div>
我使用以下代码初始化插件:
$(window).load(function() {
$('#container').beforeAfter();
});
显然,window.load不能完成任务。我需要一个JavaScript事件或类似的东西,当两个视频都被加载后,它们就会被触发,并且可以同时开始播放。我希望视频彼此完全同步,所以每个视频都在同一时间开始,我认为这可以在两个视频完全加载后初始化插件。我试过这个:
var vid = document.getElementById("myVideo");
vid.oncanplaythrough = function() {
alert("Can play through video without stopping");
};
这并不像我预期的那样奏效。它并不总是着火。如有任何帮助,我们将不胜感激。
问题中的代码与链接中的代码不同,因此我将使用后者,因为这是实际运行的代码。
看起来发生的情况是,即使视频正在播放,几秒钟后,当他们不得不等待来自网络的更多数据时,他们也会失去同步。有人可能会认为,"oncanplaythrough"足以假设视频有足够的缓冲,可以在不暂停的情况下一直播放,但事实并非总是如此。
理论上,"canplaythrough"是在浏览器猜测数据输入速度比你播放速度快时触发的,而"canplay"是在数据刚好足够显示当前时间的一到两帧时触发的。但是Chrome在"canplay"之后立即启动"canplaythrough",所以你不能指望它。即使在其他性能更好的浏览器上,数据传输也有可能开始得很快,然后在事件启动后变慢。
因此,这意味着你必须持续观看任何一个视频中的"等待"事件,并暂停它们,直到它们再次出现。
以下是一个可以作为入门参考的示例:http://code.chirls.com/whiteknuckles/
这是非常旧的代码,不是我最好的作品。如果我今天写的话,我会采取不同的做法,但它似乎运行得相当好。
- ADF:有条件地加载javascript资源
- .load()函数赢得't加载javascript
- Gmaps搜索和kmz加载javascript
- 页面显示前加载Javascript警报
- 依赖于缓慢加载javascript的UI
- 在外部JS执行后加载JavaScript
- 在WordPress站点中加载jquery.js后加载javascript代码
- 图像未加载javascript、html、angular、imdb-api
- 加载 JavaScript 取决于以前异步加载的 JavaScript
- 预加载Javascript音频以在脚本中播放
- 无法加载Javascript错误XMLHttpRequest
- AJAX JSF请求后重新加载Javascript
- Rails Assets Pipeline从控制器和方法加载JavaScript
- 使用Require.js按照依赖关系的顺序加载JavaScript
- 正在等待加载文件(加载JavaScript)
- 仅在需要时加载javascript函数
- 直接导航到chrome中的页面时未加载Javascript脚本
- 异步加载Javascript
- IE7 未加载 JavaScript 文件
- 从框架中的函数异步加载 Javascript