我希望能够制作一个网页,当他们用鼠标滚轮上下滚动时向前和向后播放视频。这似乎是可以想象的,通过 HTML5 和可能的 JavaScript。这种事情的任何方向都会有所帮助。
问问题
19939 次
6 回答
8
随时暂停视频。定期获取滚动位置并使视频搜索到滚动位置。建议使用任何页面加载器效果让视频完全缓冲。
// select video element
var vid = document.getElementById('v0');
//var vid = $('#v0')[0]; // jquery option
// pause video on load
vid.pause();
// pause video on document scroll (stops autoplay once scroll started)
window.onscroll = function(){
vid.pause();
};
// refresh video frames on interval for smoother playback
setInterval(function(){
vid.currentTime = window.pageYOffset/400;
}, 40);
于 2014-05-31T17:03:10.937 回答
2
我知道这是一个老问题,但前几天我偶然发现了它,上面的答案帮助我编写了一个小jQuery 插件来实现这个效果。
在滚动时,我计算了视频元素相对于窗口的位置,然后用它来计算视频的当前时间。
但是,我没有使用 setTimeout/setInterval 来更新视频的当前时间,而是使用了请求动画帧。请求动画帧将在可能的情况下渲染视频,而不是使用即使浏览器未准备好也会运行的 setInterval。
将此应用于上面的示例:
var renderLoop = function(){
requestAnimationFrame( function(){
vid.currentTime = window.pageYOffset/400;
renderLoop();
});
};
renderLoop();
于 2015-06-09T15:11:51.637 回答
1
我的一些模组使它更流畅
// select video element
var vid = document.getElementById('v0');
//var vid = $('#v0')[0]; // jquery option
// pause video on load
vid.pause();
// pause video on document scroll (stops autoplay once scroll started)
window.onscroll = function(){
vid.pause();
};
// refresh video frames on interval for smoother playback
setInterval(function(){
TweenMax.to(vid,2,{currentTime:window.pageYOffset/400});
}, 40);
于 2015-09-30T09:10:31.187 回答
0
可能是这样的
$(document).mousewheel(function(event, delta, deltaX, deltaY){
if (deltaY > 0) {
$(".video-element").get(0).playbackRate = -1;
} else {
$(".video-element").get(0).playbackRate = 1;
}
event.preventDefault();
});
于 2012-11-16T15:44:39.350 回答
0
我正在使用这个。它并不完美,但它应该可以帮助你。
var videoScrollTop = $(document).scrollTop();
$(document).scroll(function() {
var vid = $('#video')[0];
if(videoScrollTop < $(document).scrollTop()){
vid.currentTime += 0.081;
} else {
vid.currentTime -= 0.081;
}
videoScrollTop = $(document).scrollTop();
});
于 2014-07-15T11:05:22.523 回答
0
我知道这是一个超级旧的线程,但想提供这个最受好评的条目的精炼版本,它可以扩展到多个元素,但当元素不在页面顶部时也很重要:
playVideoOnScroll($('#myVideoContainer video'));
function playVideoOnScroll(element) {
var vid = element[0]; // select video element
var playbackConst = 3; // lower numbers = slower playback
var startingYOffset = element.offset().top - $(window).height();
vid.pause(); // pause video on load
// pause video on document scroll (stops autoplay once scroll started)
window.onscroll = function(){
vid.pause();
};
// refresh video frames on interval for smoother playback
setInterval(function(){
vid.currentTime = (window.pageYOffset-startingYOffset)/($(window).height()/playbackConst);
}, 40);
}
于 2021-04-21T18:40:59.583 回答