我正在编写一个使用scrollorama.js脚本中的Wipe动画的脚本。我希望能够在滚动深度中的某些标记处实现视频自动播放:即,当视频页面消灭了另一个时,现在可以完全查看。我已经弄清楚如何测量滚动深度,我已成功将其记录在我的控制台中。我已经弄清楚如何测量我滚动的深度,但也许我很累,我不知道如何让视频在滚动深度自动播放。我希望这是一个法律问题,我可以得到一些帮助。之前有没有人试过这个?这是迄今为止的代码。
enter code here
$(文件).ready(function(){
$(window).scroll(function(e){
var scrollAmount = $('body').scrollTop();
console.log(scrollAmount);
});
var controller = $.superscrollorama();
var pinDur = 800;
// create animation timeline for pinned element
var pinAnimations = new TimelineLite();
//pinAnimations.append([TweenMax.to($('#green'), .5, {css:{top:0}})], .5)
pinAnimations.append([TweenMax.to($('#intromovie'), .5, {css:{top:0}})], .5 )
pinAnimations.append([TweenMax.to($('#red'), .5, {css:{top:0}})], .5)
pinAnimations.append([TweenMax.to($('#blue'), .5, {css:{top:0}})], .5 )
pinAnimations.append([TweenMax.to($('#movie1'), .5, {css:{top:0}})], .5);
pinAnimations.append([TweenMax.to($('#history1'), .5, {css:{top:0}})], .5);
//pinAnimations.append(TweenMax.to($('#pin-frame-unpin'), .5, {css:{top:'100px'}}));
controller.pin($('#content_wrapper'), pinDur, {
anim:pinAnimations,
onPin: function() {
$('#content_wrapper').css('height','100%');
},
onUnpin: function() {
$('#content_wrapper').css('height','1000px');
}
});
});
答案 0 :(得分:3)
我想出来了,所以我在这里拼凑了很多其他答案的帮助下回答了我自己的问题!
如果有人有兴趣,html很简单:
<div id="videoHolder"></div>
Jquery也很简单:
$(function(){
$(window).scroll(function(e) {
var scrollAmount = $('body').scrollTop();
console.log(scrollAmount);
if(scrollAmount >="theamountyouwant" && scrollAmount <= "theotheramountyouwant") {
$("#videoHolder").html(
'<video width="1200" height="700" autoplay>' +
'<source src="http://itp.nyu.edu/~rnr217/HTML5/Week3/video/testopen.webm" type="video/webm"></source>' +
'<source src="http://itp.nyu.edu/~rnr217/HTML5/Week3/video/testopen.mp4" type="video/mp4"></source>' +
'</video>');
答案 1 :(得分:0)
只需添加下面的脚本,然后在页面的任何位置将playonscroll param添加到您的视频代码中。
有时候它需要使用不同于身体的滚动容器,有时它不明显,所以下面的代码对我来说就像一个魅力:
setInterval(function () {
$('video[playonscroll]').each(function () {
var videoElement = $(this)[0];
var eTop = $(this).offset().top;
var elementOffestY = (eTop - $(window).scrollTop());
var videoOffset = [elementOffestY, elementOffestY+$(this).height()];
if ((videoOffset[0] < 100) && (videoOffset[1] > 350)) {
console.log('play');
if (!videoElement.playing) {
videoElement.play();
}
} else {
if (videoElement.playing) {
videoElement.pause();
}
}
});
},300);
如果您总是使用body容器进行滚动,只需将setInterval更改为$(window).scroll
不要忘记为Video标签元素定义属性:
Object.defineProperty(HTMLMediaElement.prototype, 'playing', {
get: function(){
return (this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2);
}
})
答案 2 :(得分:0)
因此,在这种情况下,我们可以使用集成的JavaScript API,即Intersection Observer 。现在我们的主要任务是在特定位置播放视频,因此对于此任务,我们将在intersectionRatio值上设置一个触发器。
const images = document.querySelectorAll(".mydivTriggerClass");
vid = document.getElementById("myVideoId");
observer = new IntersectionObserver((entries) => {
console.log(entries);
if (entry.intersectionRatio > 0.34) {
vid.play();
} else {
entry.target.style.animation = "none";
}
});
observer.observe(image);
注意:请注意,控制台日志条目是可选的-只是为了在您检查时获得显示此交叉比例来自何处的信息。
有关完善的示例,请访问this link。