Phi*_*lov 6 javascript css video jquery html5
我正在尝试为窗口滚动事件上的html5视频设置currentTime。基本上,想法是在滚动页面时在视频时间轴中向前或向后移动。
此示例在此方面做得很好,没有任何问题:http : //codepen.io/ollieRogers/pen/lfeLc
这是代码:
// select video element
var vid = document.getElementById('v0');
//var vid = $('#v0')[0]; // jquery option
// pause video on load
vid.pause();
// alternative & optimized implementation thanks to http://codepen.io/daveroma/
window.onscroll = function(){
vid.currentTime = window.pageYOffset/400;
};Run Code Online (Sandbox Code Playgroud)
#set-height
display block
height 13500px
#v0
position fixed
top 0
left 0
width 100%
p font-family helvetica
font-size 24pxRun Code Online (Sandbox Code Playgroud)
<div id="set-height"></div>
<p id="time"></p>
<video id="v0" tabindex="0" autobuffer="autobuffer" preload="preload">
<source type="video/webm; codecs="vp8, vorbis"" src="http://www.html5rocks.com/tutorials/video/basics/Chrome_ImF.webm"></source>
<source type="video/ogg; codecs="theora, vorbis"" src="http://www.html5rocks.com/tutorials/video/basics/Chrome_ImF.ogv"></source>
<source type="video/mp4; codecs="avc1.42E01E, mp4a.40.2"" src="http://www.html5rocks.com/tutorials/video/basics/Chrome_ImF.mp4"></source>
<p>Sorry, your browser does not support the <video> element.</p>
</video>Run Code Online (Sandbox Code Playgroud)
但是,当我用自己的视频尝试播放时,视频就会停滞:http : //codepen.io/futurecrazy/pen/ZWGYBj
这是我的代码:
// select video element
var vid = document.getElementById('v0');
//var vid = $('#v0')[0]; // jquery option
// pause video on load
vid.pause();
// alternative & optimized implementation thanks to http://codepen.io/daveroma/
window.onscroll = function(){
vid.currentTime = window.pageYOffset/400;
};Run Code Online (Sandbox Code Playgroud)
#set-height
display block
height 13500px
#v0
position fixed
top 0
left 0
width 100%
p font-family helvetica
font-size 24pxRun Code Online (Sandbox Code Playgroud)
<div id="set-height"></div>
<p id="time"></p>
<video id="v0" tabindex="0" autobuffer="autobuffer" preload="preload">
<source type="video/webm" src="http://philippsokolov.com/fm-4.webm"></source>
<source type="video/ogg" src="http://philippsokolov.com/fm-4.ogv"></source>
<source type="video/mp4" src="http://philippsokolov.com/fm-4.m4v"></source>
<p>Sorry, your browser does not support the <video> element.</p>
</video>Run Code Online (Sandbox Code Playgroud)
我尝试了不同的视频压缩,但是仍然无法解决问题。
将不胜感激。
rco*_*ode 10
我遇到了类似的问题,问题是视频编码。
视频关键帧率低会导致延迟。
我的猜测是更改video.currentTime会使浏览器的视频解码器搜索最接近指定时间位置的关键帧,这对于具有稀有关键帧的视频可能需要一段时间。以更高的关键帧速率重新编码视频为我解决了这个问题。
请注意,可以使用 FFMPEGs-g标志控制关键帧间距。
小智 8
我经历了完全相同的事情 \xe2\x80\x94 解决起来多么痛苦!seeked环顾四周后,我注意到只有在事件触发后视频才会发生明显变化。显然,每次更新currentTime(在我的例子中,在任何滚动事件上),它都会启动一个新的搜索过程,这会延迟新的渲染,currentTime直到解决搜索过程。
我通过监听seeking和修复了它seeked事件来修复此问题,并且仅在视频当前未查找 \xe2\x80\x94\xc2\xa0 时才更新 currentTime 让查找过程完成,因此更新不会不断堆积。
这是我的脚本的相关部分:
\nlet seeking = false;\n\nheroVideo.addEventListener('seeking', function() {\n seeking = true;\n});\n\nheroVideo.addEventListener('seeked', function() {\n seeking = false;\n});\n\nfunction tick(lastKnownScrollPosition) {\n if (!seeking) heroVideo.currentTime = lastKnownScrollPosition / 300;\n}\n\nlet ticking = false;\n\nwindow.addEventListener('scroll', function(e) {\n const lastKnownScrollPosition = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function() {\n tick(lastKnownScrollPosition);\n ticking = false;\n });\n\n ticking = true;\n }\n});\nRun Code Online (Sandbox Code Playgroud)\n